如何在hibernate中为self实体添加@onetoone映射

时间:2013-08-28 11:50:16

标签: spring hibernate hibernate-mapping hibernate-annotations

如何为自身实体添加一对一映射。就像在这个例子中。我想为Person本身建立父子关系。

@Entity
@Table(name="PERSON")
public class Person {

@Id
@Column(name="personId")
private int id;

@OneToOne
@JoinColumn()
private Person parentPerson;
}

2 个答案:

答案 0 :(得分:4)

以下是双向自映射@OneToOne的示例(我将列名更改为SQL表示法):

@Entity
@Table(name="PERSON")
public class Person {

    @Id
    @Column(name="person_id")
    private int id;

    @OneToOne
    @JoinColumn(name = "parent_person_id")
    private Person parentPerson;

    @OneToOne(mappedBy = "parentPerson")
    private Person childPerson;
}

但是,我不明白你为什么要在这种情况下使用@OneToOne

答案 1 :(得分:1)

我正在使用它:

@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "PARENT_ID", nullable = true)
private Person parent;

要从服务层添加父级,您需要在数据库中至少有一个Person

让我们假设你这样做。然后创建一个新人。例如:

@Transactional
public void createPerson() {
   Person parent = //get your parent
   Person child = new Person();
   if (parent != null) {
       child.setParent(parent);
   }
}

如果这是你的意思..