@TransactionalEventListener и @Async выбрасывают исключение LazyInitializationException

#java #spring-boot #spring-data-jpa #spring-transactions

Вопрос:

У меня есть приложение для загрузки Spring, и я пытаюсь использовать TransactionalEventListener, но безуспешно. У меня есть транзакционный метод, и в конце этого метода мне нужно запустить это событие и проверить некоторые условия, чтобы выполнить обновление в другой транзакции:

 @Transactional(propagation = Propagation.REQUIRED)
public Person save(Person person) {
    // ... some logic here
    repository.save(person);
    eventPublisher.publishEvent(new CustomerInteractionEvent(this, person));
}
 

Мой составитель списка событий:

 @Service
public class CustomerInteractionEvent {

    @Async
    @TransactionalEventListener
    public void handleEvent(CustomerInteractionEvent event) throws InterruptedException {
        Person person = repository.findById(event.getPerson());
        person.getPhones(); // LazyInitializationException here
    }
}
 

В других случаях я бы просто использовал @Async вместе @Transactional , и это работало бы идеально, но не тогда, когда я использую EventListener . Связана ли эта проблема с весенним АОП?