Hibernate/JPA基于唯一键而不是主键进行合并

XDR*_*XDR 5 merge hibernate jpa primary-key unique-constraint

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

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

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

MWi*_*ner 3

根据定义 - 即JPA 规范\xc2\xb9 文档,又名 JSR 338 - 无法注释所需的行为,其本质上可以简化为:

\n\n
\n

如果实体的主键不是null,则让 Hibernate / JPA 使用主键进行合并,但是,如果主键是null,则使用唯一键进行合并

\n
\n\n

上一@Entity堂课。

\n\n

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

\n\n

尽管如此,请随时在Eclipse 基金会维护的JPA-API Github 项目中提出功能请求。

\n\n

希望能帮助到你。

\n\n

脚注

\n\n

\xc2\xb9 在2.2版本或之前的2.1/2.0版本中

\n\n

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

\n