我创建了3个名为NodeBaseNodeDocumentNodeFolder的实体类。

并使用“每个类继承的表”状态和在每个类继承的表中定义的表,为继承层次结构中的每个具体类定义了一个表,在这种情况下,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注释,以避免在不查询抽象类的情况下创建表

10-06 08:09