0

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

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

4

2 回答 2

6

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

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

于 2012-06-27T09:29:51.057 回答
2

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

于 2012-06-27T09:39:59.923 回答