有没有办法合并基于唯一键而不是主键(在Hibernate中)的JPA实体?

时间:2016-03-09 20:15:22

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  

如果实体的主键不是null,则让Hibernate / JPA使用主键进行合并,但是,如果主键为null,则使用{{3 }}合并

进入@Entity类。

遗憾的是,除非将此想法表述为下一个主要JPA规范版本的功能请求,否则将无法真正解决此要求。但是,在2019年,极不可能²很快就会尝试起草2.3版甚至3版的JPA规范。

尽管如此,请随时在Eclipse基金会维护的unique key上提出功能请求。

希望有帮助。

脚注

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

²请参阅JPA-API Github project上的时间表以及相应邮件列表中的低活动量。