2010-11-17 117 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

相关问题