问题 JPA:@PrimaryKeyJoinColumn(...)和@JoinColumn(...,insertable =?,updatable =?)相同?


你可以从JPA规范中得出,如果 @PrimaryKeyJoinColumn(...),没有可插入和可更新的参数,与

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

要么

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

当用于常规(非继承)关联时?他们应该可以互换吗?设置的可插入和可更新属性是什么?它们是否适合任何东西?请注意,我只是针对两个(似乎)实现的只读属性...

我正在使用EclipseLink和Hibernate进行相当不一致的映射异常......

这是 @PrimaryKeyJoinColumn JavaEE 5 + 6 Javadoc:

PrimaryKeyJoinColumn(JavaEE 5)
PrimaryKeyJoinColumn(JavaEE 6)

引用:

...它可以在OneToOne映射中使用,其中引用实体的主键用作引用实体的外键。


13163
2017-11-17 14:56


起源

甚至更多 - 如果看一下在不同版本的API中建立一对一关系的建议 - 看起来他们更不建议使用 @PrimaryKeyJoinColumn 用于关系创造。 Java5中 VS 的Java6 - msangel


答案:


是的,两者是等价的。

请注意,在JPA 2.0中,您还可以添加 @Id 到了 @OneToOne 映射并完全避免重复的基本id属性。

看到

来自 WikiBooks Java Persistence 网页


14
2017-11-18 14:03



谢谢!:“因为您现在有两个映射用于同一个外键列,您必须定义哪个将写入数据库(它必须是基本的),因此必须定义OneToOne或ManyToOne外键才能读取 - 这是通过将JoinColumn属性insertable和updatable设置为false,或者使用@PrimaryKeyJoinColumn而不是@JoinColumn来完成的。“ - Kawu
这意味着我将不得不为EclipseLink提交错误报告,因为用@PrimaryKeyJoinColumn(...)交换@JoinColumn(...,insertable = false,updatable = false)会抛出MappingExceptions ... - Kawu
第二个链接应该是: en.wikibooks.org/wiki/Java_Persistence/... - Kawu