看來你有A
和B
表之間的兩個關係(你有:A
有a_id
,b_id
; B
有b_id
,a_id
)。模型one to one
你只需要一個關係。確定哪個表是「主」再滴從「次要」的表列(應爲:A
具有a_id
,b_id
; B
具有b_id
)。之後,hibernate(和任何其他架構客戶端)將能夠首先插入到B
,然後到A
參考B
表。
例如,對於雞蛋和雞肉。雞蛋和雞之間有多種關係(一隻雞可以產下很多雞蛋,一隻雞可以產一隻雞)。所以對於one to one
關係蛋生產雞,它是合理的,有parent_egg_id
列chicken
表,所以雞蛋可以創建第一,然後參照該蛋生雞。
Hibernate映射可能如下所示:
在雞類:
@OneToOne
@JoinColumn(name = "parent_egg_id")
public Egg getParentEgg() {
return parentEgg;
}
蛋類:
@OneToOne(mappedBy = "parentEgg")
public Chicken getChildChicken() {
return childChicken;
}
更新:
同樣的事情, constrained
在xml中,optional
屬性在OneToOne
接口會做。它默認爲true,所以這種關係默認是可以空的。
/**
* (Optional) Whether the association is optional. If set
* to false then a non-null relationship must always exist.
*/
boolean optional() default true;
根據你的意見行首先插入A
。我會考慮從B
到A
,而不是從A
到B
。在這種情況下,要創建A
中的項目,然後在B
中需要兩個insert
聲明(關係從A
到B
- 需要額外的update A
聲明)。
嗨:)非常感謝您的回答,但我沒有A和B. A之間的兩個關係A_ID和B已B_ID。正如我在我的文章中提到的,我實際上能夠首先插入B,獲取id並使用它創建A.我真的只想找出如何使OneToOne屬性可以爲空,所以我可以先創建A B :) – JustDanyul
默認爲空。請參閱答案的更新部分。 – Andrey
再次感謝您的回答,我解決了它。我認爲問題是我正在使用PrimaryKeyJoinColumn,它似乎創建了從A到B的外鍵約束:)非常感謝幫助:) – JustDanyul