Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Hibernate JPA中,如何透明地解决;未能延迟初始化角色“的集合”;例外_Java_Hibernate_Jpa_Lazy Loading_Java Ee 7 - Fatal编程技术网

Java 在Hibernate JPA中,如何透明地解决;未能延迟初始化角色“的集合”;例外

Java 在Hibernate JPA中,如何透明地解决;未能延迟初始化角色“的集合”;例外,java,hibernate,jpa,lazy-loading,java-ee-7,Java,Hibernate,Jpa,Lazy Loading,Java Ee 7,我正在将一个巨大的项目从Eclipselink迁移到HibernateJPA,该项目运行在Wildfly 10.0上 移动到Hibernate后,我遇到了著名的异常“无法懒洋洋地初始化角色集合” 我找到了很多解决这个问题的方法,比如这些关于这个问题的建议,以及旧方法 但这些解决方案有些过时了,需要对我运行的使用eclipselink的现有代码进行一些更改 他们的解决方案是否更新、现代、透明,可以节省我的时间 注意:我没有使用spring(仅使用JPA和EJB)。我认为您正在寻找配置属性。但这是一

我正在将一个巨大的项目从Eclipselink迁移到HibernateJPA,该项目运行在Wildfly 10.0上

移动到Hibernate后,我遇到了著名的异常“无法懒洋洋地初始化角色集合”

我找到了很多解决这个问题的方法,比如这些关于这个问题的建议,以及旧方法

但这些解决方案有些过时了,需要对我运行的使用eclipselink的现有代码进行一些更改

他们的解决方案是否更新、现代、透明,可以节省我的时间


注意:我没有使用spring(仅使用JPA和EJB)。

我认为您正在寻找配置属性。但这是一种反模式。仅仅因为其他JPA提供商使用它,并不意味着它也是有效的,或者甚至是合适的

另一种“修复”LazyInitializationException的坏方法是

方法是
加入FETCH
所有一对一和多对一关联以及最多一个一对多关联


如果需要获取多个一对多或多对多关联,则第一个关联应为
JOIN fetch ed
,而后续关联应使用单独的查询进行初始化。您可以导航关联以触发初始化,也可以使用。

问题的根源一直没有改变,因此您找到的解决方案仍然非常相关。JPA2.1增加了对更“现代”的解决方案的支持,这仍然需要您重构代码。恐怕除了切换回EclipseLink(在Wildfly 10上可以很好地工作)之外,并没有其他的省时方法。但为什么hibernate团队并没有解决这个老年问题呢?或者换句话说,我们从没有实现这个功能中得到了什么好处?它有。通过迫使您推理如何获取关联,您将获得最佳性能。使用OSIV或临时会话(Hibernate也支持)进行“修复”并不是真正的解决方案。没有什么灵丹妙药。另一方面,Eclipselink提出了一个神奇的解决方案,让开发人员可以随时访问任何惰性列表,而无需使用使用JOIN FETCH的JPQL编写命名查询,此外,它不会影响性能。EclipseLink必须使用单独的连接来获取这些关联。检查连接池日志以验证它。您是否分析了关联加载以确保它不会影响性能?尝试构建一个测试,其中在EntityManager关闭之前获取10个关联,在EM关闭之后获取关联时获取一个测试。看看哪一个更快。谢谢,我会亲自尝试你提出的测试,并让你知道。