我的 Java Web 应用程序(Spring + JPA)中出现以下情况:
- 我有将实体保存到数据库的方法
- 在持久化实体之后,我立即调用
notify()
来唤醒另一个线程。 - 第二个线程正在处理我刚刚保留的实体。
所以结果我有:
第二个线程查询一个新的持久实体,但它还不存在。因此,第二个线程向数据库发送查询的速度比主线程持久化它的速度更快。如果我添加一些超时,它就可以完美工作。但这对我来说不是一个合适的解决方案。我想我可以使用 contains()
方法检查实体管理器。但我不确定它的效率如何。
我对这个主题还很陌生,所以我很高兴听到您的建议。
附:我使用的是Spring框架,因此持久化和通知发生在一个事务中(用@Transactional注释标记)。第二个线程没有任何 @Transactional 类。
谢谢, 艾米丽。
最佳答案
尝试使用实体监听器
在实体被持久化时收到通知。您可以在 JPA Wiki Book 中阅读有关实体监听器的信息。 ,Hibernate documentation并在 www.objectdb.com .
关于java - 在调用查询此持久化实体的另一个线程之前,如何确保实体已持久化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18176358/