似乎Hibernate忽略了javax.persistence.fetchgraph中指定的任何@Basic字段,并且总是加载整个对象,直到我们明确地将字段定义为@Basic(fecth = LAZY)。 然而,JPA 2.1标准说:
要指定获取图,请在执行EntityManager.find或查询操作时设置javax.persistence.fetchgraph属性。获取图仅包含EntityGraph实例中明确指定的字段,忽略默认实体图设置。
问题在于我不希望默认情况下将所有字段都设置为LAZY加载,因为在某些特定情况下,我只需要部分对象用于UI的海量数据提取。当我可以动态指定要加载的内容时,是否有解决此案例的方法?
EclipseLink可以按预期使用fetchgraph。
P.S。 Hibernate 5.3.1.Final,使用hibernate-gradle-plugin进行字节码增强:5.3.1.Final:
hibernate {
enhance {
enableLazyInitialization= true
enableDirtyTracking = true
enableAssociationManagement = true
enableExtendedEnhancement = false
}
}