【问题标题】:JPA: is @PrimaryKeyJoinColumn(...) the same as @JoinColumn(..., insertable = ?, updatable = ?)?JPA:@PrimaryKeyJoinColumn(...) 是否与 @JoinColumn(..., insertable = ?, updatable = ?) 相同?
【发布时间】:2010-11-17 14:56:01
【问题描述】:

如果@PrimaryKeyJoinColumn(...)没有可插入和可更新参数,你能从JPA规范中推导出来吗?

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

或

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

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

EclipseLink 和 Hibernate 的映射异常不一致...

这是@PrimaryKeyJoinColumn JavaEE 5 + 6 Javadoc:

PrimaryKeyJoinColumn (JavaEE 5)
PrimaryKeyJoinColumn (JavaEE 6)

引用:

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

【问题讨论】:

  • 甚至更多 - 如果查看他们关于在不同版本的 API 中建立一对一关系的建议 - 看起来他们更不建议使用 @PrimaryKeyJoinColumn 来创建关系。 java5 与 java6

标签: java jpa mapping primary-key jpa-2.0


【解决方案1】:

是的,两者是等价的。

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

见

来自WikiBooks Java Persistence 页面

【讨论】:

  • 谢谢!:“因为您现在有两个映射用于同一个外键列,您必须定义哪一个将写入数据库(它必须是基本的),所以 OneToOne 或 ManyToOne 外键键必须定义为只读。这通过将可插入和可更新的 JoinColumn 属性设置为 false 或使用 @PrimaryKeyJoinColumn 而不是 @JoinColumn 来完成。"
  • 这意味着我必须为 EclipseLink 提交错误报告,因为将 @JoinColumn(..., insertable = false, updatable = false) 与 @PrimaryKeyJoinColumn(...) 交换会引发 MappingExceptions.. .
  • 第二个链接应该是:en.wikibooks.org/wiki/Java_Persistence/…
猜你喜欢
  • 2019-08-04
  • 2020-03-18
  • 2011-03-25
  • 2013-04-10
  • 1970-01-01
  • 2011-06-17
  • 2011-04-17
  • 2012-08-09
相关资源
最近更新 更多