在使用@Async標記的方法中使用JpaTemplate合併JPA實體時,實體不會獲得標識。但是,這在將所有內容合併到同一個線程中時都有效。 (但不幸的是,時間太長)。在Spring @Async方法中合併不起作用?
例如:
...
@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()」 返回一個Foo實例W/O型的ID。事實上,我懷疑返回的對象與合併之前處於相同的狀態。我在控制檯上看到大量的SQL傳遞。對asyncSave()的調用來自另一個存儲庫對象。它確實是一個單獨的線程。那麼,還有什麼呢?
有人曾經有過同樣的問題嗎?