2010-11-17 118 views
11

你能從JPA規範推導,如果@PrimaryKeyJoinColumn(...),不具有可插入和更新參數,相同JPA:@PrimaryKeyJoinColumn(...)與@JoinColumn相同(...,insertable =?,updatable =?)?

@JoinColumn(..., insertable = false, updatable = false) 

@JoinColumn(...,插入= true,updatable = true)

在常規(非繼承)關聯上使用?它們是否可以互換?什麼是可插入和可更新的屬性設置?他們是否設置了任何東西?請注意,我只針對只讀屬性,這兩個(似乎)實現...

我得到相當不一致的映射例外與EclipseLink的和Hibernate ...

這裏的@PrimaryKeyJoinColumn的JavaEE 5 + 6的Javadoc:

PrimaryKeyJoinColumn (JavaEE 5)
PrimaryKeyJoinColumn (JavaEE 6)

引用:

...並且它可以用於OneToOne映射,其中引用實體的主鍵用作被引用實體的外鍵。

+0

甚至更​​多 - 如果看看錫爾建議製作不同版本一到一個關係的API - 看起來像他們更不建議使用'@ PrimaryKeyJoinColumn'來創建關係。 [java5](http://docs.oracle.com/javaee/5/api/javax/persistence/OneToOne.html)與 [java6](http://docs.oracle.com/javaee/6/api /javax/persistence/OneToOne.html) – msangel 2013-03-06 15:51:19

回答

13

是的,這兩者是等價的。

請注意,在JPA 2.0中,您還可以將@Id添加到@OneToOne映射中,並避免重複使用重複的基本id屬性。

WikiBooks Java Persistence頁面

+0

謝謝!「因爲你現在有兩個同一個外鍵列的映射,你必須定義哪一個映射到數據庫(它必須是基本的),所以OneToOne或ManyToOne外鍵必須定義爲只讀,這可以通過將JoinColumn屬性可插入和可更新設置爲false來完成,或者使用@PrimaryKeyJoinColumn而不是@JoinColumn。「 – Kawu 2010-11-18 16:02:36

+0

這意味着我將不得不爲EclipseLink提交錯誤報告,因爲使用@PrimaryKeyJoinColumn(...)交換@JoinColumn(...,insertable = false,updatable = false)將拋出MappingExceptions ... – Kawu 2010-11-18 16:04:22

+0

第二個鏈接應該是:http://en.wikibooks.org/wiki/Java_Persistence/OneToOne#Target_Foreign_Keys.2C_Primary_Key_Join_Columns.2C_Cascade_Primary_Keys – Kawu 2010-11-18 20:23:42

相關問題