@Async로 표시된 메소드에서 JpaTemplate을 사용하여 JPA 엔티티를 병합 할 때 엔티티는 ID를 얻지 못합니다. 그러나,이 모두 같은 스레드에서 병합 할 때 작동합니다. (그러나 길게 유감스럽게도). 예를 들어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()는"ID하여 w/o 푸 인스턴스를 반환한다. 사실, 나는 반환 된 객체가 병합 전과 동일한 상태에 있다고 생각합니다. 콘솔에서 SQL을 많이 보았습니다. asyncSave()에 대한 호출이 다른 리포지토리 개체에서 발생했습니다. 그리고 그것은 정말로 분리 된 실입니다. 그래서, 그 밖에 무엇이있을 수 있습니까?
누군가는 지금 같은 문제가 있었다?