我创建了3个名为NodeBase
,NodeDocument
和NodeFolder
的实体类。
使用Table Per Class Inheritance stategy并按照每个类继承的表中的定义,为继承层次结构中的每个具体类定义一个表,在这种情况下,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 的表?
答案 0 :(得分:0)
如果父类是抽象的,你可以使用@MappedSupperclass而不是@Entity anotation来避免在你没有查询抽象类的情况下创建表
答案 1 :(得分:0)
@MappedSuperclass
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;
}
现在可以使用了。随它去吧。