Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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 唯一的一对值+;休眠和批量插入_Java_Hibernate_Object - Fatal编程技术网

Java 唯一的一对值+;休眠和批量插入

Java 唯一的一对值+;休眠和批量插入,java,hibernate,object,Java,Hibernate,Object,我的目标: 我需要防止添加已经存在的带有夫妇(姓名)的行。 例如:我可以加上(约翰;布朗),(约翰;怀特),(路易丝;布朗),但我应该防止再加一个(约翰;布朗) 保存对象时,我会保存列表。 这意味着,如果我把键放在DB上,让这对夫妇(名字、姓氏)唯一,我担心当我保存对象列表时,如果其中一个失败,其他所有值也会失败 我怎样才能防止这种情况 多谢各位 不幸的是,如果附加了实例,JPA中的异常是不可恢复的 根据规范: 3.3.2事务回滚对于事务范围和扩展持久性上下文,事务回滚会导致所有预先存在的 托管

我的目标:

我需要防止添加已经存在的带有夫妇(姓名)的行。 例如:我可以加上(约翰;布朗),(约翰;怀特),(路易丝;布朗),但我应该防止再加一个(约翰;布朗)

保存对象时,我会保存列表。 这意味着,如果我把键放在DB上,让这对夫妇(名字、姓氏)唯一,我担心当我保存对象列表时,如果其中一个失败,其他所有值也会失败

我怎样才能防止这种情况


多谢各位

不幸的是,如果附加了实例,JPA中的异常是不可恢复的

根据规范:

3.3.2事务回滚对于事务范围和扩展持久性上下文,事务回滚会导致所有预先存在的 托管实例和删除的实例[31]将分离。这个 实例的状态将是在点处实例的状态 该事务已回滚。事务回滚通常是 导致持久性上下文在当前位置处于不一致状态 回滚点。特别是,版本属性和 生成的状态(例如,生成的主键)可能不一致。 以前由持久性上下文管理的实例 (包括在该环境中持久化的新实例) 因此,事务)可能无法以与其他事务相同的方式重用 例如,分离的对象在传递到合并时可能会失败 行动。[32]

这意味着一旦遇到异常,就不能将该会话用于任何进一步的数据库操作

这意味着您必须创建一个新会话,然后再次启动事务

如果直接使用HibernateAPI管理事务,Hibernate也是如此

12.2.3。异常处理如果会话引发异常(包括任何SQLException),则立即回滚数据库 事务,调用Session.close()并放弃会话实例。 某些会话方法不会使会话保持一致的状态 状态Hibernate引发的任何异常都不能视为可恢复的。 通过在finally中调用close()确保会话将被关闭 街区

处理这种情况的一种方法是,您不使用托管实例,而是使用分离实例,在这种情况下,您将在每次数据库操作(无论是否成功)后关闭会话或entityManager

在这种情况下,一旦关闭会话,对象就会分离,进一步的异常将不会对它们产生任何影响


遇到了一个不错的

保存或更新方法呢?我可以让它明白,对于存在的夫妇(姓名、姓氏),它应该使用更新功能而不是保存功能吗?当您调用save时,它将尝试插入,当您调用saveOrUpdate时,它将为您执行此操作,如果记录不存在,它将插入新记录,否则它将更新现有记录