1

我的 Java Web 应用程序(Spring + JPA)中有以下情况:

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

所以结果我有:第二个线程查询一个新的持久实体,但它还没有。所以第二个线程更快地将查询发送到数据库,然后主线程将其持久化。如果我添加一些超时,它会完美运行。但这对我来说不是一个合适的解决方案。我想我可以用方法检查实体管理器contains()。但我不确定它的效率如何。我对这个主题很陌生,所以我很高兴听到你的建议。

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

谢谢,艾米丽。

4

2 回答 2

0

尝试在Entity Listeners持久化实体时使用通知。您可以在JPA Wiki BookHibernate 文档www.objectdb.com中阅读有关实体侦听器的信息。

于 2013-08-11T20:43:05.213 回答
0

真正持久化到数据库仅在事务提交后发生,就它发生在@Transactional方法中而言。所以我需要在事务提交后调用第二个线程,并且我能够使用 TransactionSynchronizationManager 及其 afterCommit() 方法来完成它。这是包含所有信息和示例的链接http://azagorneanu.blogspot.ru/2013/06/transaction-synchronization-callbacks.html 也许它对某人有用。

于 2013-08-14T19:09:43.970 回答