私はrabbitmqからのメッセージを消費したいと思います。このプロセスの一環として、私はバネデータリポジトリからエンティティを読み取りました。私はこのエンティティの遅延初期化フィールドにアクセスしようとするとき、私は得る:ここで@RabbitListenerメソッドでHibernateセッションを作成するにはどうすればよいですか?
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();
}
私は、トランザクションを強制することによって、セッションを作成しようとしましたが、それは動作しません。 。
問題は、エンティティをロードしていますが、いくつかの関連のエンティティを使用しようとしていると、それがLAZYの方法でフェッチされるので、初期化されていないという事実に関係しているようです。あなたはリポジトリとアカウントエンティティのいくつかのコードを投稿することがありますか?または、あなたは 'Hibernate.initialize(repository.find(subscription.getId()))を実行するかもしれません。getAccount())' –