hibernateTemplate Flush()和clear()方法有什么区别?

时间:2013-05-29 08:28:01

标签: hibernate clear flush

hibernateTemplate flush()和clear()方法有什么区别?哪一个使用的时候?

我有以下代码

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

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

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

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

1 个答案:

答案 0 :(得分:2)

Hibernate Session.clear():

void org.hibernate.Session.clear()

从会话缓存中删除所有对象,并取消所有待处理的保存,更新和删除。

Session.flush的位置  刷新所有挂起的保存,更新和删除数据库。

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

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

回答另外一个问题

使用Batch更新大量记录。