使用hibernate保存对象时,出现如下错误:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.lee.dao.hibernate.User#12]
网上查阅资料后,找到解决办法:
解决方法:
使用 hibernate 3 的 merge 方法. session.merge(newDetail)即可,它会在 session 缓存中找到持久化对象,把新对象的属性赋过去,再保存原session中的持久化对象。
如果在session或数据库中没有的对象,用merge方法的话,它也能够帮你把记录 insert 到表中,相当于 save 方法。
上面是一个简单的例子,实际业务中可能是经过一番复杂的操作后自己也很难搞清楚 new 的一个新对象在 session/数据库中是否已存在。所以第一种方法你需要清楚你的每一个对象状态,第二种方法在 hibernate 3 中就比较通用一些。
附 hibernate javadoc 对 session.merge() 方法的注释:
Copy the state of the given object onto the persistent object with the same identifier. If there is no persistent instance currently associated with the session, it will be loaded. Return the persistent instance. If the given instance is unsaved, save a copy of and return it as a newly persistent instance. The given instance does not become associated with the session. This operation cascades to associated instances if the association is mapped with cascade="merge".
The semantics of this method are defined by JSR-220.
分享到:
- 2007-11-01 03:47
- 浏览 1042
- 评论(0)
- 论坛回复 / 浏览 (0 / 2215)
- 查看更多
相关推荐
这种方式能够有效避免因缓存问题而导致的数据一致性问题。 #### 三、测试场景与事务管理 1. **测试场景**:为了更好地理解事务管理在实际应用中的效果,下面列举了一些具体的测试场景: - **test0()**:作为...
### Hibernate常见异常及解决方案 #### 一、保存了一个父对象,但是它的关联对象没有保存到数据库中 ...通过上述知识点的学习和理解,可以有效地解决Hibernate开发中常见的异常问题,提高开发效率和代码质量。
#### 五、常见问题及解决方案 - **如何处理 NonUniqueObjectException 异常?** 当调用 `saveOrUpdate` 或 `merge` 时,如果 Session 中存在具有相同标识符的对象,会抛出 `NonUniqueObjectException` 异常。 -...
根据提供的标题“Hibernate逍遥游记”以及描述和标签中的关键词“Hibernate PDF”,我们可以推断这份文档...对于初学者来说,掌握上述知识点将有助于更好地理解和运用Hibernate框架解决实际项目中的数据持久化问题。
**Hibernate 框架详解** ...通过本课件的学习,你将能够熟练掌握Hibernate的基本用法,理解其工作原理,并具备解决实际问题的能力。在后续的lesson中,我们将逐一深入探讨这些知识点,让你的Java ORM技能更上一层楼。
- 错误处理:当对象状态不匹配或ID设置不正确时,Hibernate会抛出特定异常,如`PersistentObjectException`, `IdentifierGenerationException`, `TransientObjectException`, `NonUniqueObjectException`等。...
- Hibernate的异常体系包括`HibernateException`及其子类,如`ConstraintViolationException`、`NonUniqueObjectException`等,根据异常类型进行问题定位。 - 使用二级缓存提高性能,如Ehcache集成,减少对数据库的...
5. **异常处理**: 捕获并处理Hibernate的特定异常,如`StaleObjectStateException`表示并发控制问题,`NonUniqueObjectException`表示违反唯一性约束等。 **总结** 《Hibernate中文开发手册详解》提供了全面的...
8. 异常处理:了解Hibernate抛出的常见异常,如ConstraintViolationException、NonUniqueObjectException等,并学会如何处理。 9. 高级特性:深入研究Hibernate的高级特性,如动态模型、子查询、分页查询、时间戳、...
在使用Hibernate时,可能会遇到一些特定的异常,如`HibernateException`、`NonUniqueObjectException`等,需要正确捕获并处理。 ### 10. 性能优化 优化策略包括合理使用缓存、批处理操作、延迟加载、减少不必要的...
了解Hibernate常见的异常,如`HibernateException`、`NonUniqueObjectException`、`ObjectNotFoundException`等,以便在编程时进行正确的错误处理。 ### 9. 事务管理 使用Transaction接口进行事务操作,如begin(),...
在使用JPA过程中可能会遇到各种异常,如`PersistenceException`, `EntityExistsException`, `NonUniqueObjectException`, `TransactionRequiredException`等,这些异常通常反映了JPA操作中的错误情况,需要根据异常...