在Hibernate 5.1.0 / JPA 2.1中,有没有办法基于唯一键而不是基于主键进行合并?
我将一个唯一键的值作为外部系统的输入,但输入显然不包含我的内部主键。
我希望能够调用EntityManager#merge(entity)
,如果entity
的主键不为空,请让Hibernate / JPA使用主键进行合并,但是,如果主键为null,则使用唯一键进行合并(即,如果主键为null,并且如果唯一键对应于数据库中的行,则该行将更新,但如果数据库中没有行对应于唯一键,然后将插入一个新行。
答案 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上的时间表以及相应邮件列表中的低活动量。