在JPA中有什么方法可以模拟以下类型的关系吗?
PERSON INT id PKEY VARCHAR name CHILD INT parentId FKEY(PERSON->id) INT nameId FKEY(PERSON->id)
parentId
是多对一关系,nameId
是一对一的关系。那么,基本上parentId
和nameId
会在CHILD中创建复合主键吗?
谢谢!
答案 0 :(得分:1)
我会将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;
}
这是示例代码,逐字输入,您必须自己进行错误检查。但这是一个起点。
答案 1 :(得分:0)
您可以为您的方案创建实体。但表设计应该是nameId应该是子表的主键,如果您在创建实体类时遇到问题,那么在NetBeans IDE或Eclipse IDE中,可以选择“实体类来自表”来创建实体类。