Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以基于唯一键而不是主键(在Hibernate中)合并JPA实体?_Hibernate_Jpa_Merge_Primary Key_Unique Constraint - Fatal编程技术网

有没有一种方法可以基于唯一键而不是主键(在Hibernate中)合并JPA实体?

有没有一种方法可以基于唯一键而不是主键(在Hibernate中)合并JPA实体?,hibernate,jpa,merge,primary-key,unique-constraint,Hibernate,Jpa,Merge,Primary Key,Unique Constraint,在Hibernate 5.1.0/JPA2.1中,是否有任何方法可以基于唯一键而不是主键进行合并 我将唯一键的值作为来自外部系统的输入,但输入显然不包含我的内部主键 我希望能够调用EntityManager#merge(entity),如果entity的主键不为null,让Hibernate/JPA使用主键进行合并,但如果主键为null,则使用唯一键进行合并(即,如果主键为空,并且如果唯一键对应于数据库中的一行,则该行将被更新,但如果数据库中没有对应于唯一键的行,则将插入新行).根据定义-即文件

在Hibernate 5.1.0/JPA2.1中,是否有任何方法可以基于唯一键而不是主键进行合并

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

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

根据定义-即文件又名JSR 338-没有注释所需行为的方法,本质上可以归结为:

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

@实体
类上

遗憾的是,除非这一想法被制定为下一个主要JPA规范发行版的功能请求,否则这一需求将不会有真正的解决方案。然而,2019年,很快就不可能有人试图在2.3版甚至3版中起草JPA规范

不过,可以在Eclipse基金会维护的情况下提出一个特性请求。 希望能有帮助

脚注

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


²请参阅上的时间图表和相应邮件列表中的低活动量。

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