在使用Hibernate saveOrUpdate 批量保存或更新数据时(也就是即有保存又有更新),有时会报如下错误:
org.hibernate.HibernateSystemException: a different object with the same identifier value was already associated with the session: [com.lee.dao.hibernate.User#12]
方法的调用:
evaluateService.saveOrUpdate(comment,orderDetail,user)
原始报错方法如下:
@Transactional
public void saveOrUpdate(Object...objects) {
for(Object obj : objects){
getHibernateTemplate().saveOrUpdate(obj);
getHibernateTemplate().flush();
}
}
修改后方法如下:
@Transactional
public void saveOrUpdate(Object...objects) {
for(Object obj : objects){
getHibernateTemplate().saveOrUpdate(obj);
getHibernateTemplate().flush();
getHibernateTemplate().clear();//后添加
}
}
分享到:
相关推荐
在Hibernate中,插入数据通常通过Session对象的save()或saveOrUpdate()方法完成。然而,HQL也支持插入操作,它允许我们以面向对象的方式编写插入语句。例如: ```java session.createQuery("insert into EntityName...
9. 批量操作:为了提高性能,Hibernate支持批量插入、更新和删除,以及批处理查询。 10. JPA集成:Hibernate也实现了Java Persistence API(JPA),提供了一种标准的方式来使用ORM服务。 通过"MLDN_Hibernate开发...
5. **CRUD操作**: 插入(save()或saveOrUpdate())、更新(update())、查询(load()、get()、Criteria、HQL等)、删除(delete())。 6. **事务处理**: Hibernate支持自动和手动的事务管理,确保数据的一致性。 **...
- **批量插入**:使用saveOrUpdate方法一次插入多个对象。 - **批量更新/删除**:使用SQL语句或HQL进行批量操作。 #### 5.3 懒加载与立即加载 - **懒加载**:默认情况下,Hibernate在需要时才加载关联对象的数据。 ...
批量操作,如批量删除或更新。例如,`bulkUpdate`方法可以直接执行SQL更新或删除语句,极大提高了效率。需要注意的是,批量操作后,由于对象可能在Hibernate的缓存中,所以需要手动清除缓存以保持数据一致性。 E. `...
- **保存/插入**:使用`Session`的`save()`或`saveOrUpdate()`方法来保存新实体到数据库。 - **更新**:对已存在的实体进行修改后,调用`Session`的`update()`方法来更新数据库。 - **删除**:通过`Session`的`...
1. 插入:Session的save()或saveOrUpdate()方法,将对象持久化到数据库。 2. 更新:Session的update()方法,更新已存在的对象。 3. 删除:Session的delete()方法,删除对象。 4. 查询:HQL、Criteria API或原生SQL...
- 通过Session的save()或saveOrUpdate()方法保存对象到数据库。 - 使用find()或get()方法获取对象,或使用createQuery()或createSQLQuery()构建查询语句。 - 在事务中执行批量操作,确保数据的原子性和一致性。 - ...
1. 插入(Save/SaveOrUpdate):将对象状态持久化到数据库。 2. 更新(Update):修改已存在的对象状态并同步到数据库。 3. 删除(Delete):从数据库中移除对象。 4. 加载(Load/Get):根据主键从数据库中获取对象...
- Batch processing:批量插入、更新和删除,提高数据库操作效率。 - Transaction boundaries:正确设置事务边界,确保并发环境下的数据一致性。 8. 高级特性: - Cascade:级联操作,当操作一个对象时,自动...
3. 避免N+1查询问题:通过预加载关联数据或使用`JOIN`查询减少额外的数据库调用。 九、高级特性 1. 异步操作:通过Hibernate的事件监听器,可以实现异步持久化操作。 2. 移动对象:`DetachedCriteria`允许在不打开...
- 插入和更新:使用Session的save()、saveOrUpdate()、persist()方法完成对象的保存。 - 删除:调用Session的delete()方法删除对象。 - 加载和刷新:load()和get()用于根据ID加载对象,refresh()用于刷新对象状态...
8. 批量操作:学习如何使用Hibernate进行批量插入、更新和删除,以提高效率,例如Session的saveOrUpdateAll()、deleteAll()和flush()方法。 9. 第二级缓存:了解Hibernate的缓存机制,特别是第二级缓存,它可以提高...
1. Session:是Hibernate的主要工作单元,负责保存、更新和删除对象,以及执行HQL(Hibernate查询语言)。 2. Transaction:处理数据的原子性,确保一组操作要么全部成功,要么全部失败。 **五、CRUD操作** 1. 插入...
- **批处理(Batch Processing)**:批量插入或更新,提高数据库操作效率。 - **缓存策略调整**:合理设置缓存级别和生命周期,避免无效的数据库访问。 - **SQL优化**:监控和分析生成的SQL,避免全表扫描等低效操作...
- **批量处理**:对于大量数据的插入、更新操作,可以使用批量处理方式,减少与数据库的交互次数。 - **缓存机制**:Hibernate提供了二级缓存功能,可以在多个请求之间共享数据,减少数据库访问压力。 ### 总结 ...
Hibernate 支持批量插入、更新和删除,可以显著提高性能。同时,合理的缓存策略,如设置合理的缓存大小和过期时间,能够进一步提升应用性能。 ### 链接与关联 Hibernate 支持多种关联类型,如一对一(OneToOne)、...
例如`public void saveOrUpdate(T entity)`,在保存或更新实体时自动处理事务。 6. **批量操作**:提供批量插入、更新或删除的方法,比如`public void batchSave(List<T> entities)`,这在处理大量数据时可以大大...
1. 插入(Insert):使用Session的save()或saveOrUpdate()方法实现对象持久化。 2. 更新(Update):调用Session的update()方法更新已存在的对象。 3. 删除(Delete):调用Session的delete()方法删除对象。 4. ...