2012-10-12 71 views
1

我總是根據關係背後的邏輯使用@OneToOne@ManyToOne關係 - 如果每一端只有一個實體,那麼它是一對一的。如果另一方的實體可能在這一邊有多個相應的實體,那麼它是多對一的。即一個學生只有一本學生用書,而每本學生用書只屬於一個學生(一對一)hibernate(和JPA)以不同的方式處理@OneToOne和@ManyToOne嗎?

但是,我剛剛在我們的代碼庫中看到了幾個@OneToOne註釋,它們實際上並不是一對一的,一。不知何故,這已經工作了很長一段時間,我不知道是否hibernate對待這些註釋是不同的?

如果在實體上有@OneToOne,但是除此之外,它可能不會允許@OneToMany映射另一邊?

+0

你看過兩種情況下使用的DB約束嗎?也許在@ @ OneToOne的情況下是獨一無二的,但是在@ @ OneToMany的情況下呢? –

+0

我剛剛檢查過 - 沒有創建唯一的約束。事情是 - 它的工作,這是奇怪的:) – Bozho

+0

事實上,有一次它確實產生了一個獨特的約束。 – Bozho

回答

0

我不知道如何在特定作品休眠模式,但作爲的EclipseLink一個JPA提供商不區分這兩個。而且大多數應用程序也不會;從技術上來說OneToOne應該對外鍵有一個唯一的約束,但我從來沒有見過使用它,許多應用程序使用它並允許目標被重用。

JPA規範對ManyToOne行爲沒有任何附加限制,所以我不會在任何提供者中依賴它。我只使用ManyToOne作爲OneToMany關係的後端指針 - 如果沒有OneToMany,我只使用OneToOne。

相關問題