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

标签 hibernate flush

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

我有以下代码

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

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

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

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

最佳答案

hibernate Session.clear() :

void org.hibernate.Session.clear()

从 session 缓存中删除所有对象,并取消所有未决的保存、更新和删除。

作为 Session.flush 的地方 将所有待处理的保存、更新和删除刷新到数据库。

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

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

再回答一个问题

使用 Batch 更新大量记录。

关于hibernate - hibernateTemplate Flush() 和 clear() 方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16808938/

相关文章:

java - 如何在 Hibernate 中建立零对多关系

java - 库中的 Hibernate 配置

c - 如何在不需要用户输入的情况下刷新标准输入?

C - 将缓冲区写入文件然后释放缓冲区会导致段错误

Android:OutputStreamWriter 刷新后未发送数据(套接字)

MySQL锁等待超时和死锁错误

java - Spring3 依赖注入(inject)不适用于 mule

java - 在ManyToMany上添加主键(用于发布)

linux - 刷新CPU缓存而不使缓存失效?

java - 我创建了一个带有自动刷新功能的 PrintWriter;为什么它不自动冲洗?