Je veux consommer les messages d'un rabbitmq. Dans le cadre de ce processus, je lis une entité à partir d'un référentiel de données de printemps. Lorsque j'essaye d'accéder à un champ paresseusement initialisé de cette entité, j'obtiens:

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

Voici mon auditeur:

@RabbitListener(bindings = {
    @QueueBinding(
        value = @Queue(value = EVENT_QUEUE, durable = "true"),
        exchange = @Exchange(value = EventConstants.EVENT_EXCHANGE_NAME, type = EventConstants.EVENT_EXCHANGE_TYPE)
})
@Transactional
protected void handleSubscriptionCreated(Subscription subscription) {
  // just sample code
  repository.find(subscription.getId())).getAccount();
}

J'ai essayé de créer une session en imposant une transaction, mais cela ne fonctionne pas.

0
Laures 17 janv. 2017 à 19:06

2 réponses

Meilleure réponse

Il semble que @Transactional Les annotations sur les méthodes d'écoute ne fonctionnent que si la méthode d'écoute est publique.

https://jira.spring.io/browse/AMQP-666

0
Laures 17 janv. 2017 à 16:38

Vous devez configurer votre @Transactional pour une référence de bean JpaTransactionManager appropriée.

0
Artem Bilan 17 janv. 2017 à 16:15