整个事务提交后Hibernate是否刷新?

时间:2012-06-27 09:23:50

标签: hibernate flush hibernate-entitymanager

我有两个申请 第一个应用程序将在while循环中持久存储到数据库中,循环将在很长一段时间后结束(例如10-15分钟)。 但是第二个应用程序需要第一个应用程序已经存储在数据库中的数据,第二个应用程序不能等待第一个应用程序完成。它将在第一个应用程序开始运行后立即启动。 我在第一个应用程序中使用了EntityManager.flush(),希望第一个应用程序能够立即将数据与数据库同步。这样,处于不同事务中的第二个应用程序就可以开始处理数据了。

这不起作用,flush()方法的目的是什么,以及如何解决我的问题?请帮忙!!

2 个答案:

答案 0 :(得分:5)

flush()将所有挂起的更改写入数据库。它执行insert,update和delete语句。它(默认情况下)在提交事务之前自动调用

但仅仅因为你刷新并不意味着其他交易会看到变化。这取决于事务隔离级别,在大多数数据库中,它是READ_COMMITTED。事务彼此隔离(ACID中的I)。因此,如果您的隔离级别为READ_COMMITTED,则在此事务提交之前,第二个应用程序中的事务将不会在第一个应用程序的事务中看到任何更改。

答案 1 :(得分:1)

听起来好像你应该将第一个应用程序的工作拆分成单独的事务。更改通常仅在提交后对其他事务可见(如JB Nizet所述。您可以更改,但不应该)。