[英]Save id in both entities via Hibernate + JPA
我有兩個具有OneToOne關系的實體,如下所示:
@Entity
@Table(name = "FOO")
Foo{
@OneToOne(fetch = FetchType.LAZY, mappedBy = "foo")
@Cascade({org.hibernate.annotations.CascadeType.ALL})
@JoinColumn(name = "BAR_ID")
private Bar bar;
// getters and setters
}
@Entity
@Configurable
@Table(name = "BAR")
Bar{
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "FOO_ID")
@Cascade({org.hibernate.annotations.CascadeType.ALL})
private Foo foo;
// getters and setters
}
在服務層中,我通過在Foo中設置Bar來建立連接:
Bar.setFoo(foo);
barDAO.saveOrUpdate(bar);
Wich將foo id保存在Bar表中。 但是相反的事情不會發生。 休眠是否可以保存僅創建一組的兩個ID? 我以為這已經可以了
您錯過了關系的另一面。
如果您說bar.setFoo(foo)
那么在必須說foo.setBar(bar)
,當然也可以在setFoo
方法中執行此操作。
級聯意味着它將觸發對該關系的操作,但是在您的情況下,由於缺少一側,該關系尚未完成。
您需要首先很好地了解這些關系。 據我所知,您可能會嘗試在Foo
和Bar
之間建立雙向的OneToOne關系。
@Entity
@Table(name = "FOO")
Foo {
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "BAR_ID")
private Bar bar;
// getters and setters
}
@Entity
@Table(name = "BAR")
Bar{
@OneToOne(mappedBy = "bar")
private Foo foo;
// getters and setters
}
在雙向關聯中,關聯的兩側均退出-擁有和反向。 對於一對一的雙向關系,擁有方對應於包含適當外鍵的方。
這里的擁有方是Foo
而BAR_ID將是該外鍵。 兩端都有連接列是沒有意義的。 關系將從Foo
層疊到Bar
。 此處的反面是Bar
,需要用擁有方參考的值mapped by
來注釋。
現在,如果你設置Bar
在對象Foo
它會持續的Bar
對象與映射一起Foo
。 做相反的事情沒有道理。 是不是?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.