При объединении сущностей JPA с использованием JpaTemplate в методах, помеченных @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 без идентификатора.На самом деле, я подозреваю, что возвращаемый объект находится в том же состоянии, что и до слияния.Я вижу много SQL, проходящих мимо на консоли.Вызов asyncSave () поступает из другого объекта репозитория.И это действительно отдельная тема.Итак, что еще это может быть?
У кого-нибудь когда-нибудь была такая же проблема?