尽管 @transactional,但未能懒惰地初始化角色集合

发布于 2025-02-11 09:55:47 字数 2223 浏览 1 评论 0原文

在以下控制器内部,

   @Transactional
   @PostMapping(PATH_VARIABLE)
   public void assignStuff(
         @PathVariable final long someNo,
         @PathVariable final long someId)
         throws AccessDeniedException, ValidationException, ResourceNotFoundException
   {
      final Set<SomeEntity> createdEntities = someService.assignSomething(
            resolveData(someNo, someId)
      );

      if (CollectionUtils.isNotEmpty(createdEntties))
      {
         anotherService.publishPackageDataChangeEvent(someNo);
      }
   }

以下例外是

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: someEntity, could not initialize proxy - no Session
    at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:582)
    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:201)
    at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:561)
    at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:132)
    at org.hibernate.collection.internal.PersistentSet.iterator(PersistentSet.java:163)
    at java.util.Spliterators$IteratorSpliterator.estimateSize(Spliterators.java:1821)
    at java.util.Spliterator.getExactSizeIfKnown(Spliterator.java:408)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
    at aThirdService.thingsChanged(SomeCalculator.java:61)

其他” @transactional,对吗?那为什么还会发生呢?

Inside the following controller

   @Transactional
   @PostMapping(PATH_VARIABLE)
   public void assignStuff(
         @PathVariable final long someNo,
         @PathVariable final long someId)
         throws AccessDeniedException, ValidationException, ResourceNotFoundException
   {
      final Set<SomeEntity> createdEntities = someService.assignSomething(
            resolveData(someNo, someId)
      );

      if (CollectionUtils.isNotEmpty(createdEntties))
      {
         anotherService.publishPackageDataChangeEvent(someNo);
      }
   }

the following exception is thrown

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: someEntity, could not initialize proxy - no Session
    at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:582)
    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:201)
    at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:561)
    at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:132)
    at org.hibernate.collection.internal.PersistentSet.iterator(PersistentSet.java:163)
    at java.util.Spliterators$IteratorSpliterator.estimateSize(Spliterators.java:1821)
    at java.util.Spliterator.getExactSizeIfKnown(Spliterator.java:408)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
    at aThirdService.thingsChanged(SomeCalculator.java:61)

From other questions, it seems like this should be fixed with @Transactional, right? So why does it still occur?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文