我创建了3个名为NodeBase
,NodeDocument
和NodeFolder
的实体类。
并使用“每个类继承的表”状态和在每个类继承的表中定义的表,为继承层次结构中的每个具体类定义了一个表,在这种情况下,NodeBase
是抽象实体,但是创建了该实体的表,名为NODEBASE。
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class NodeBase implements Serializable {
@Column(name="NBS_UUID")
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long uuid;
@Column(name="NBS_NAME")
@Basic
private String name;
@ManyToOne(targetEntity = NodeFolder.class)
private NodeFolder parent;
}
@Entity
@Table(name="SDM_NODE_DOCUMENT")
public class NodeDocument extends NodeBase implements Serializable {
@Column(name="NDC_MIMETYPE")
@Basic
private String mimeType;
}
@Entity
@Table(name="SDM_NODE_FOLDER")
public class NodeFolder extends NodeBase implements Serializable {
@OneToMany(targetEntity = NodeBase.class,mappedBy = "parent")
private Collection<NodeBase> children;
}
如何以仅创建两个名为SDM_NODE_DOCUMENT和SDM_NODE_FOLDER的表的方式创建实体类?
最佳答案
据报道,eclipse link可以做到这一点,至少在早期版本中,有人说这是一个bug,或者可能不是,仅是eclipselink生成的一个表可以对继承的所有表进行联合。
如果父类是抽象类,则可以使用@MappedSupperclass而不是@Entity注释,以避免在不查询抽象类的情况下创建表