【发布时间】:2013-08-13 03:17:14
【问题描述】:
我的 Java Web 应用程序(Spring + JPA)出现以下情况:
- 我有将实体持久保存到数据库的方法
- 在持久实体之后,我立即调用
notify(),它正在唤醒另一个线程。 - 第二个线程正在处理我刚刚持久化的实体。
因此,我有:
第二个线程查询一个新的持久实体,但它还不存在。所以第二个线程更快地将查询发送到数据库,然后主线程将其持久化。如果我添加一些超时,它会完美运行。但这对我来说不是一个合适的解决方案。我想我可以使用contains() 方法检查 entitymanager。但我不确定它的效率如何。
我对这个主题很陌生,所以我很高兴听到你的建议。
附言我正在使用 Spring 框架,因此在一个事务中持久化并通知发生(标有 @Transactional 注释)。第二个线程没有任何@Transactional 类。
谢谢, 艾米丽。
【问题讨论】:
标签: java multithreading persistence entitymanager spring-transactions