根據書Pro JPA 2單向@ManyToOne和@OneToOne之間的主要區別在於,在@OneToOne:JPA單向@OneToOne vs @ManyToOne與休眠 - 沒有區別?
只有源實體的一個實例可以參考同一個目標實體實例。 換句話說,目標實體實例是 不在源實體實例之間共享。在數據庫中,這相當於對源外鍵列(即源實體表中的外鍵列)具有唯一性約束。
事情是,當我在實體上創建這樣的映射並讓Hibernate創建模式時,根本沒有創建任何獨特的約束。爲什麼?正因爲如此,如果我必須明確地爲映射定義唯一約束,@ManyToOne和@OneToOne之間沒有區別。我可以爲他們兩人做,而且沒有任何區別。這是正確的行爲嗎?
「不這樣做只會混淆應用程序的開發人員」 - 這是我能想到的最佳理由!你能指定使用@OneToOne創建約束的Hibernate版本嗎? – user1071076
我最近使用過的一個,IIRC。 3.6及更高版本。它也可能取決於你的數據庫方言。 –
嗯,Oracle XE,可能就是這樣。將檢查與MySQL ... – user1071076