0

在 JPA 中,有没有办法对以下类型的关系进行建模?

人
   INT id PKEY
   VARCHAR 名称

孩子
   INT parentId FKEY(PERSON->id)
   INT nameId FKEY(PERSON->id)

whereparentId是多对一关系,又nameId是一对一关系。那么,本质上,parentIdnameId在 CHILD 中创建一个复合主键吗?

谢谢!

4

2 回答 2

1

我会重命名nameIdchildId. 从逻辑上讲,您在一个人和他的孩子之间建立了一种关系。每个孩子都是一个人。对于您当前拥有的模型,没有理由拥有单独的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;
}

这是示例代码,逐字输入,您必须自己进行错误检查。但这是一个起点。

于 2012-12-17T16:29:16.567 回答
0

您可以为您的方案创建一个实体。但是表设计应该是 nameId 应该是子表的主键,如果您在创建实体类时遇到问题,那么在 NetBeans IDE 或 Eclipse IDE 中有一个用于创建实体类的“表中的实体类”选项。

于 2012-12-18T08:26:00.167 回答