3

hibernateTemplate flush() 和 clear() 方法有什么区别?什么时候用?

我有以下代码

    public void saveAllReportRoomRes(List<ReportRoomRes> reportRoomResList) throws  DataAccessException {
    hibernateTemplate.saveOrUpdateAll(reportRoomResList);
    hibernateTemplate.flush();
    }

我在循环中调用这个方法,它每次都会传递记录列表(总记录可以超过 2 个 lacs)。因为我的代码在事务中,有时在后续迭代中,如果休眠找到相同的主键(我有复合主键)对象,它会抛出 NonUniqueObject 异常。但实际上它需要更新之前插入的记录。

如果我使用 HibernateTemplate.clear(),它正在工作。

也是保存或更新大量记录的好方法吗?因为这是我通常的情况,我以一定的间隔将数据从一个数据库复制到另一个数据库。

4

1 回答 1

2

休眠 Session.clear() :

无效 org.hibernate.Session.clear()

从会话缓存中删除所有对象,并取消所有挂起的保存、更新和删除。

其中 Session.flush 将所有挂起的保存、更新和删除刷新到数据库。

http://docs.spring.io/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/HibernateTemplate.html

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

再回答一个问题

使用 Batch 更新大量记录。

于 2014-04-07T15:16:32.327 回答