1

如何爲自我實體添加一對一映射。就像在這個例子中。我想擁有Person本身的親子關係。如何在休眠狀態下爲自我實體添加@onetoone映射

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

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

@OneToOne 
@JoinColumn() 
private Person parentPerson; 
} 
+0

你已經做到了。怎麼了? –

+0

@PauliusMatulionis是的,我做了,BT我看我的後端MySQL表架構。新字段已創建爲「parentPerson_id」,我如何從我的服務方法中添加它。 –

回答

3

這裏是例如雙向自映射@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

+0

實際上任何人只能有一個家長。我想與自我參照實體建立親子關係。 –

0

我使用它是這樣的:

@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); 
    } 
} 

如果這是你的意思..

+0

無需指定fetch = FetchType.EAGER,因爲默認值已經是EAGER for OneToOne – webyildirim