如何在 @RabbitListener 方法中创建 Hibernate Session?

How can i create a Hibernate Session in a @RabbitListener Method?

我想使用来自 rabbitmq 的消息。作为这个过程的一部分,我从 spring 数据存储库中读取了一个实体。当我尝试访问该实体的延迟初始化字段时,我得到:

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

这是我的听众:

@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();
}

我试图通过强制执行事务来创建会话,但这不起作用。

您必须配置 @Transactional 以获得适当的 JpaTransactionManager bean 引用。

看起来 @Transactional 侦听器方法上的注释仅在侦听器方法为 public 时才有效。

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