【问题标题】:Is there a way to merge a JPA Entity based on unique key instead of primary key (in Hibernate)?有没有办法基于唯一键而不是主键(在 Hibernate 中)合并 JPA 实体?
【发布时间】:2016-06-24 10:09:21
【问题描述】:

在 Hibernate 5.1.0 / JPA 2.1 中,有没有办法基于唯一键而不是基于主键进行合并?

我有一个唯一键的值作为来自外部系统的输入,但输入显然不包含我的内部主键。

我希望能够调用EntityManager#merge(entity),并且如果entity 的主键不为空,则让Hibernate / JPA 使用主键进行合并,但是,如果主键为空,使用唯一键进行合并(即如果primary为null,并且唯一键对应数据库中的一行,则更新该行,但如果数据库中没有唯一键对应的行,则将插入新行)。

【问题讨论】:

  • 我也有同样的问题。你解决了吗?
  • 在唯一键合并从我的工作要求中删除之前,我没有找到 Hibernate 内置的任何内容,因此我从未进一步调查。
  • 目前正在寻找解决方案,但估计希望不大。

标签: hibernate jpa merge primary-key unique-constraint


【解决方案1】:

根据定义 - 即 the JPA specification¹ 文档又名 JSR 338 - 没有 方法来注释所需的行为,本质上可以简化为:

如果实体的主键不是null,让Hibernate/JPA使用主键进行合并,但是,如果主键是null,则使用unique key进行合并 em>

@Entity 类。

遗憾的是,除非这个想法被表述为下一个主要 JPA 规范版本的功能请求,否则不会有真正的解决方案来满足这个要求。然而,在 2019 年,不太可能在短期内尝试在 2.3 版甚至 3 版中起草 JPA 规范。

尽管如此,请随时通过 Eclipse 基金会维护的 JPA-API Github project 提出功能请求。

希望对你有帮助。

脚注

¹ 在 2.2 版或之前的 2.1/2.0 版中

² 请参阅https://projects.eclipse.org/projects/ee4j.jpa 的时间表以及相应邮件列表中的低活动量。

【讨论】:

    猜你喜欢
    • 2016-06-07
    • 1970-01-01
    • 2014-02-19
    • 2021-12-04
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 2020-02-19
    相关资源
    最近更新 更多