如何在调用查询此持久化实体的另一个线程之前确保实体是持久化的



我的Java web应用程序(Spring+JPA)中存在以下情况:

  1. 我有一个将实体持久化到数据库的方法
  2. 在持久化实体之后,我调用notify(),它正在唤醒另一个线程
  3. 第二个线程正在处理我刚刚持久化的实体

因此,我有:第二个线程查询一个新的持久化实体,但它还不存在。所以第二个线程将查询发送到数据库的速度比主线程将其持久化的速度快。如果我添加一些超时,它可以完美地工作。但这不是一个适合我的解决方案。我想我可以用contains()方法检查实体管理器。但我不确定它的效率有多高。我对这门学科还很陌生,所以很高兴听到你的建议。

p.s.我使用的是Spring框架,所以在一个事务中持久化并通知发生的事情(用@Transactional注释标记)。第二个线程并没有任何@Transactional类。

谢谢,艾米莉。

当实体持久化时,尝试使用Entity Listeners进行通知。您可以在JPA Wiki Book、Hibernate文档和www.objectdb.com.

上阅读有关实体侦听器的信息

只有在提交事务之后才对数据库进行真正的持久化,就像在@Transactional方法中一样。因此,我需要在事务提交后调用第二个线程,并且我可以使用TransactionSynchronizationManager及其afterCommit()方法来完成此操作。这是包含所有信息和示例的链接http://azagorneanu.blogspot.ru/2013/06/transaction-synchronization-callbacks.html也许它对某些人有用。

最新更新