Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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
Java 使用Hibernate替换一组记录的正确方法是什么_Java_Hibernate_Jpa - Fatal编程技术网

Java 使用Hibernate替换一组记录的正确方法是什么

Java 使用Hibernate替换一组记录的正确方法是什么,java,hibernate,jpa,Java,Hibernate,Jpa,我们的应用程序会收到一个记录列表,这些记录将替换现有的一组记录。每个记录都有一个基于序列的主键和另一个字段上的唯一约束,该字段是其他字段上的外键(即备用键) 事情是这样的: for each old record delete the old record next for each new record insert new record next 问题是Hibernate在删除之前运行insert,因此引发了唯一的约束冲突。新记录与旧记录具

我们的应用程序会收到一个记录列表,这些记录将替换现有的一组记录。每个记录都有一个基于序列的主键和另一个字段上的唯一约束,该字段是其他字段上的外键(即备用键)

事情是这样的:

   for each old record
      delete the old record
   next

   for each new record
      insert new record
   next
问题是Hibernate在删除之前运行insert,因此引发了唯一的约束冲突。新记录与旧记录具有相同的备用密钥

如果我删除唯一约束,它就可以正常工作

这样做的正确方法是什么

两个建议:

  • 您可以使用merge,这将“替换”数据库中的记录,具体取决于您的实现
  • 您可以尝试刷新两个FOR之间的所有修改

  • 您是否尝试在删除发生后刷新EntityManager?事实上,虽然刷新确实解决了问题,但我已决定正确处理并合并更改的记录。所以谢谢你的两个建议!