【问题标题】:Should I use composite primary keys if I use JPA and the keys can change?如果我使用 JPA 并且键可以更改,我应该使用复合主键吗?
【发布时间】:2013-06-10 21:04:28
【问题描述】:

我有点困惑是否应该使用复合主键或代理键。

最初我想在需要时使用复合主键,以便拥有一个更清晰的数据库,但是键的某些部分可能会更改,并且 JPA 不允许更新对象的主键。

例如,我有一个 Product 实体,它的主键由字符串代码和另一个实体 Account 组成。代码可以更新,但使用 JPA,我只能使用我想避免的 JPQL 来做到这一点。在这种情况下使用自动递增的主键好吗?

这是否意味着唯一的解决方案是使用代理键?

谢谢

【问题讨论】:

    标签: database jpa primary-key composite-primary-key


    【解决方案1】:

    如你所说,根据规范 JPA 不支持更新主键:

    应用程序不得更改主键的值[10]。这 如果发生这种情况,行为是不确定的。[11]
    ...
    [10] 这包括不 更改作为主键或主键的可变类型的值 复合主键的属性。
    [11] 实施可能,但是 不需要,抛出异常。便携式应用程序不得 依赖于任何此类特定行为。

    在我看来,使用代理键是最好的选择,大多数时候也会自动递增一个。

    其他选项是使用原始密钥删除实体并使用新密钥(以及原始实体的其他值)重新创建它。这是大量的工作,尤其是对于具有许多关系的实体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 2010-11-09
      相关资源
      最近更新 更多