[英]Hibernate JPA OneToOne Relationship with a foreign key
我想在兩個實體(也是mysql中的表)之間創建一個OneToOne關系。 當我收到發布請求時,我想保存A實體,然后自動保存B實體,因為B中有一列(“ a_id”)是A(“ id_a”)中主鍵的外鍵。 我該如何映射它們的正確性?
@Table("a_tb")
public class A(){
@Column(name="id_a")
private Long idA;
@OneToOne(mappedBy = "aId", cascade = CascadeType.ALL,
fetch = FetchType.LAZY, orphanRemoval = true, optional = false)
private B b;
}
@Table("b_tb")
public class B(){
@Column(name="id_b")
private Long idB;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "a_id")
private Long aId;
}
曾嘗試將idA設置為A類型,但是當我調用get方法時,他將循環調用A和B嵌套的A,以此類推。等等。我只想將A的ID保存在B中,而不是整個對象中,否則,當我調用get方法並且循環返回時,他將返回整個對象。 映射正確,而不是B中a_id中值的自動設置。
我期望的是:當我創建A時,B會自動獲取A的ID並在我請求保存對象A時將其保存到db中的列(“ id_a”)中。這也應該與delete一起使用(當我刪除A時, B也被刪除)。 匹配的JSON將是:
{
"a":{
"id_a": "value",
},
"b":{
"id_b": "value",
"a_id": "id_a"
}
}
感謝您的建議。
從最初的樣子
@OneToOne
@JoinColumn(name = "idA_id")
A a;
將是您需要的更改,
您需要在兩個類中提供一對一的映射[參考]。 如果是父引用,則不是自動設置,您可以創建一個臨時變量並使用它來設置父的主鍵。
試試這個例子:
@Table("a_tb")
public class A(){
@Column(name="id")
private Long id;
@OneToOne(mappedBy = "aId", cascade = CascadeType.ALL,
fetch = FetchType.LAZY, orphanRemoval = true, optional = false)
private B b;
}
@Table("b_tb")
public class B(){
@Column(name="id")
private Long id;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "a_id")
private A a;
@Transient
private Long aId;
// getters and setters
public void setAId(Long aId){
if(aId != null){
this.a = new A();
this.a.setId(aId);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.