【问题标题】:Problem with Hibernate.initialize(...) I got LazyInitializationException but when I debug everything is fineHibernate.initialize(...) 的问题我得到了 LazyInitializationException 但是当我调试时一切都很好
【发布时间】:2018-09-20 08:05:09
【问题描述】:

我正在将 250 万个复杂对象加载到 MS SQL。 由于性能原因,我在内存中使用了某种缓存。 在这个过程中我打电话给Hibernate.initialize(...) 使用默认 JVM 设置的应用程序总是在同一个地方失败(每次相同的记录失败)。

我有三个Set<>,我打了三个电话Hibernate.initialize(...)A部分) 总是第二个 Set<> 未正确初始化。

  • 当我在初始化之前设置断点并执行代码时 一切都很好(没有发生问题/没有发生异常)
  • 当我在LazyInitializationException 之后设置断点发生时 那么问题总会发生。
  • 当我测试id 的记录并在初始化后调用toString() 那么一切都很好(没有问题发生/没有异常发生) - B节

代码如下:

 private SomeObject getObject(int id) {
     SomeObject result = null;
     if(!cache.containsKey(id)) {
         SomeObject obj = context.getEntity(SomeObject.class, new ContextKey(id));

         // section A
         Hibernate.initialize(((SomeParentObject)obj.getField()).getSetA());
         Hibernate.initialize(((SomeParentObject)obj.getField()).getSetB());
         Hibernate.initialize(((SomeParentObject)obj.getField()).getSetC());

         // section B
         if(id == 1234) {
             ((SomeParentObject)obj.getField()).getSetB().toString();
         }

         cache.put(id, obj);
         result = obj;
     } else {
         result = cache.get(id);
     }
     return result;
 }

LazyInitializationException在使用此方法后发生。

  1. 知道为什么会这样吗?
  2. 如何调试这种 有问题吗?

【问题讨论】:

    标签: java hibernate debugging lazy-initialization


    【解决方案1】:

    您可能有 Set 的 fetch 类型为 Lazy,当您调用它时,它们可能不在同一个事务中。

    因此,导致问题,但在您调试时它会很好地分叉。 尝试将获取类型设置为 EAGER。

    【讨论】:

      【解决方案2】:

      我找到了解决方法(以避免更改休眠配置等) - 当我使用时:

          ((SomeParentObject)obj.getField()).getSetA().size();
          ((SomeParentObject)obj.getField()).getSetB().size();
          ((SomeParentObject)obj.getField()).getSetC().size();
      

      而不是Hibernate.initialize(...) 然后它工作正常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-02
        • 1970-01-01
        • 2013-11-27
        • 1970-01-01
        • 1970-01-01
        • 2010-11-16
        • 2022-01-23
        • 2021-01-17
        相关资源
        最近更新 更多