在JPA中,有没有办法对以下关系进行建模?
人 国际 ID PKEY 瓦查尔名称孩子 INT parentId FKEY(PERSON->id) INT nameId FKEY(PERSON->id)
其中parentId
是多对一关系,nameId
是一对一关系。那么,从本质上讲,parentId
和nameId
会在 CHILD 中创建复合主键吗?
谢谢!
我会nameId
重命名为childId
。从逻辑上讲,一个人和它的孩子之间有一种关系。每个孩子本身就是一个人。对于您当前拥有的模型,没有理由拥有单独的child
表,但假设您稍后将添加不同的属性。我将使用继承和聚合对关系进行建模:
@Entity
@Table(name="PERSON")
@Inheritance(strategy=InheritanceType.JOINED)
public class Person implements Serializable {
@Id
private Integer id;
private String name;
@OneToMany(mappedBy = "parent")
private List<Child> children;
}
@Entity
@Table(name="CHILD")
@PrimaryKeyJoinColumn(name="nameId", referencedColumnName = "id")
private class Child extends Person implements Serializable {
@ManyToOne
@JoinColumn(name = "parentId", referencedColumnName = "id")
private Person parent;
}
这是示例代码,逐字输入,您必须自己进行错误检查。但这是一个起点。
可以为方案创建实体。但是表设计应该是 nameId 应该是子表的主键,如果您在创建实体类时遇到问题,那么在 NetBeans IDE 或 Eclipse IDE 中,有一个用于创建实体类的"表中的实体类"选项。