我的Java Web应用程序(Spring + JPA)中存在以下情况:
notify()
,它正在唤醒另一个线程。因此,我有:
第二个线程查询新持久化的实体,但它还没有。所以第二个线程更快地向数据库发送查询,然后主线程持续存在。如果我添加一些超时它完美的工作。但对我来说这不是一个合适的解决方案。我想我可以用contains()
方法检查entitymanager。但我不确定它会有多高效。
我对这个问题很新,所以我很高兴听到你的意见。
P.S。我正在使用Spring框架,因此在一个事务中持久化并通知发生事件(标记为@Transactional注释)。第二个帖子没有任何@Transactional类。
谢谢, 艾米丽。
答案 0 :(得分:0)
尝试使用Entity Listeners
在实体持久化时收到通知。您可以在JPA Wiki Book,Hibernate documentation和www.objectdb.com中阅读有关实体监听器的信息。
答案 1 :(得分:0)
只有在事务提交后才会真正持久存在于数据库中,就像在@Transactional
方法中发生的那样。所以我需要在事务提交后调用第二个线程,并且我能够使用TransactionSynchronizationManager及其afterCommit()方法来完成它。以下是包含所有信息和示例http://azagorneanu.blogspot.ru/2013/06/transaction-synchronization-callbacks.html的链接
也许它会对某人有用。