【发布时间】:2012-01-31 23:09:46
【问题描述】:
在标有 @Async 的方法中使用 JpaTemplate 合并 JPA 实体时,实体不会获得 id。但是,这在将它们全部合并到同一个线程中时有效。 (但不幸的是,花费的时间太长了)。
例如:
...
@Autowired
private JpaTemplate jpaTemplate;
@Async
public Future<Foo> asyncSave(final Foo foo) {
return new AsyncResult<Foo>(save(foo));
}
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public Foo save(final Foo foo) {
final Foo savedFoo = jpaTemplate.merge(foo);
return savedFoo; // <== savedFoo.getId() returns null !
}
...
调用方法“asyncSave()”会返回一个没有 id 的 Foo 实例。事实上,我怀疑返回的对象与合并前的状态相同。我在控制台上看到很多 SQL 传递。对 asyncSave() 的调用来自另一个存储库对象。它确实是一个单独的线程。那么,还能是什么呢?
有人遇到过同样的问题吗?
【问题讨论】:
标签: hibernate spring jpa asynchronous