在 JPA 中,有没有办法对以下类型的关系进行建模?
人 INT id PKEY VARCHAR 名称 孩子 INT parentId FKEY(PERSON->id) INT nameId FKEY(PERSON->id)
whereparentId
是多对一关系,又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 中有一个用于创建实体类的“表中的实体类”选项。