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

选择正确的交易,取决于您选择的交易类型。

回答另一个问题

使用批处理来更新大量记录。

10-08 08:26