【问题标题】:Hibernate lazy loading not working休眠延迟加载不起作用
【发布时间】:2023-03-31 06:53:01
【问题描述】:

我使用的是 3.6.1.Final 版本

我的实体 bean 中有以下属性

    @JoinColumn( name = "FOLDER_PARENT_ID", referencedColumnName = "FOLDER_ID" )
@ManyToOne(cascade=CascadeType.MERGE, fetch= FetchType.LAZY )
private FolderTbl parent;

在我的单元测试中,Assertnull 失败,因为 getParent() 不为空

assertNull( folderTbl.getParent() );

我还需要做什么才能停止休眠加载父级?

【问题讨论】:

    标签: java hibernate jpa jpa-2.0


    【解决方案1】:

    即使将lazy设置为true,父值也不会为null。延迟加载使用代理对象并将其分配给父属性。当我们尝试使用父对象(调用getParent())时,它将使用代理对象加载实际的父对象。

    如果您不想加载对象,请不要为该项目配置 JPA 属性并将其设置为瞬态。

    【讨论】:

    • 感谢您的解释。我现在明白了
    • 同时检查您的日志中是否存在诸如“由于未启用或未发生编织,正在恢复实体类 [class xxx.xxx.xx] 的 OneToOne 或 ManyToOne 属性 [xxxxx] 上的惰性设置.
    【解决方案2】:

    Parent 正确配置为延迟加载,关键是您错误地测试它

    当你调用 getParent() 方法时,Hibernate 将加载对象,当对实际对象的请求到来时,它将加载。

    您可以通过将show_sql 配置为true 来检查这个东西。当你调用getParent()时,它会调用一个查询

    【讨论】:

      【解决方案3】:

      Hibernate 将 Lazy fetching 视为提示。这是 JPA 2.0 规范在第 364 页表 9 中所说的内容。

      (可选)是字段还是属性的值 应该延迟加载或必须急切地获取。这 EAGER 策略是对持久化提供者的要求 必须急切地获取值的运行时。这 LAZY 策略是对持久性提供程序运行时的提示。

      【讨论】:

        【解决方案4】:

        在某些情况下,您可能根本不需要加载惰性集合。您可以使用如下方法从会话中分离集合。

        public class. .... {
        .....
          @JoinColumn( name = "FOLDER_PARENT_ID", referencedColumnName = "FOLDER_ID" )
          @ManyToOne(cascade=CascadeType.MERGE, fetch= FetchType.LAZY )
          private FolderTbl parent;
          ...
          public void detachLazyObjects() {
             parent = null;
          }
        

        然后调用此方法将类从您需要为空的位置分离出来。请谨慎使用此快捷方式,我建议您在使用此解决方案之前考虑其他方法。

        【讨论】:

          【解决方案5】:

          实际上,调用 getParent() 可能会返回一个代理实例,显示您有一个父代。 如果您访问 id 以外的字段,则必要时会加载父级。

          请注意,父节点可能已经被事务加载,因此驻留在第一级缓存中。如果是这样,Hibernate 通常不会再对数据库进行查询。

          如前所述,如果您的实体具有对父级的非瞬态引用,getParent() 将始终返回非空值,即使父级本身尚未加载。

          【讨论】:

            猜你喜欢
            • 2011-06-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-08-07
            • 2015-01-01
            相关资源
            最近更新 更多