hibernateTemplate flush()和clear()方法有什么区别?何时使用哪一个?
我有以下代码
public void saveAllReportRoomRes(List<ReportRoomRes> reportRoomResList) throws DataAccessException {
hibernateTemplate.saveOrUpdateAll(reportRoomResList);
hibernateTemplate.flush();
}
我在循环中调用此方法,该方法每次都传递记录列表(总记录可以超过2个lacs)。因为我的代码正在事务处理中,所以在后续迭代中的某个时候,如果hibernate找到相同的主键(我有复合主键)对象,则会引发NonUniqueObject Exception。但实际上它需要更新之前插入的记录。
如果我使用HibernateTemplate.clear(),它将正常工作。
也是保存或更新大量记录的好方法吗?因为这是我通常的情况,所以我会以一定的间隔将数据从一个DB复制到另一个DB。
最佳答案
休眠Session.clear():
无效org.hibernate.Session.clear()
从 session 缓存中删除所有对象,并取消所有挂起的保存,更新和删除。
哪里作为Session.flush
将所有未完成的保存,更新和删除刷新到数据库。
http://docs.spring.io/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/HibernateTemplate.html
选择正确的交易,取决于您选择的交易类型。
回答另一个问题
使用批处理来更新大量记录。