用hibernate做修改和删除的时候,有时候会遇到 org.hibernate.NonUniqueObjectException 异常,
a different object with the same identifier value was already associated with the session
可以解释为 有一个具有相同值的不同对象已经与和 session 相关联。
1. Session session = HibernateSessionFactory.getSession();
2.
3. // 加载OID为1L的对象,会被放在session缓存中
4. LoanDetail detail = (LoanDetail)session.get(LoanDetail.class,1L);
5.
6. // new 一个OID也为1L的临时对象
7. LoanDetail newDetail = new LoanDetail(1L);
8. ewDetail.setSubjectId(1000L);
9.
10. // 持久化一个临时对象,试图放在session的缓存中,因OID冲突出现异常
11. session.save(newDetail);
12.
13. // 执行saveOrUpdate同样会出现以上的异常
14. // session.saveOrUpdate(newDetail);
解决方法:
1) 如果用的 hibernate 2, 需要在get/load/query到持久化对象,赋上新的属性值,再 save/update/saveOrupdate.
对以上代码就是:不能 new 一个session中已存在OID的对象,直接
detail.setSubjectId(1000L);
session.save(detail);
session.save()一个持久化对象时,会转化成update调用。
2) 使用 hibernate 3 的 merge 方法. session.merge(newDetail)即可,它会在 session 缓存中找到持久化对象,把新对象的属性赋过去,再保存原session中的持久化对象。
如果在session或数据库中没有的对象,用merge方法的话,它也能够帮你把记录 insert 到表中,相当于 save 方法。
分享到:
相关推荐
- **异常处理**:正确处理Hibernate抛出的各种异常,比如`org.hibernate.NonUniqueObjectException`等,确保程序健壮性。 - **代码可读性和可维护性**:遵循良好的编码规范,如命名规则、注释等,使得代码更易于理解...
在使用Hibernate时,可能会遇到各种异常,如ConstraintViolationException(违反约束),NonUniqueObjectException(非唯一对象)等,理解并适当地处理这些异常是保证程序稳定运行的关键。 ### 8. 分页查询与批处理...
在使用Hibernate时,可能会遇到一些特定的异常,如`HibernateException`、`NonUniqueObjectException`等,需要正确捕获并处理。 ### 10. 性能优化 优化策略包括合理使用缓存、批处理操作、延迟加载、减少不必要的...
然而,在这种情况下,需要注意`org.hibernate.NonUniqueObjectException`异常的处理,该异常通常发生在同一个会话中试图保存具有相同标识符但不同对象的情况。例如: ```java public class ExampleServiceImpl { ...
8. 异常处理:了解Hibernate抛出的常见异常,如ConstraintViolationException、NonUniqueObjectException等,并学会如何处理。 9. 高级特性:深入研究Hibernate的高级特性,如动态模型、子查询、分页查询、时间戳、...
了解Hibernate常见的异常,如`HibernateException`、`NonUniqueObjectException`、`ObjectNotFoundException`等,以便在编程时进行正确的错误处理。 ### 9. 事务管理 使用Transaction接口进行事务操作,如begin(),...
5. **异常处理**: 捕获并处理Hibernate的特定异常,如`StaleObjectStateException`表示并发控制问题,`NonUniqueObjectException`表示违反唯一性约束等。 **总结** 《Hibernate中文开发手册详解》提供了全面的...
- Hibernate的异常体系包括`HibernateException`及其子类,如`ConstraintViolationException`、`NonUniqueObjectException`等,根据异常类型进行问题定位。 - 使用二级缓存提高性能,如Ehcache集成,减少对数据库的...
在Hibernate中,当我们保存一个实体时,如果该实体与其他实体有关联关系(如一对多或多对一),那么可能遇到的问题是,尽管父实体被成功保存到了数据库中,但与其关联的对象却没有被一起保存。 **解决方案:** 1. *...
#### 五、常见问题及解决方案 - **如何处理 NonUniqueObjectException 异常?** 当调用 `saveOrUpdate` 或 `merge` 时,如果 Session 中存在具有相同标识符的对象,会抛出 `NonUniqueObjectException` 异常。 -...
- 错误处理:当对象状态不匹配或ID设置不正确时,Hibernate会抛出特定异常,如`PersistentObjectException`, `IdentifierGenerationException`, `TransientObjectException`, `NonUniqueObjectException`等。...
在使用JPA过程中可能会遇到各种异常,如`PersistenceException`, `EntityExistsException`, `NonUniqueObjectException`, `TransactionRequiredException`等,这些异常通常反映了JPA操作中的错误情况,需要根据异常...