当前位置:  开发笔记 > 编程语言 > 正文

避免Hibernate LazyInitializationExceptions的策略

如何解决《避免HibernateLazyInitializationExceptions的策略》经验,为你挑选了2个好方法。

除了使用OpenSessionInView模式之外,还有其他方法可以避免Hibernate Web应用程序中的LazyInitializationExceptions吗?使用OpenSessionInView有任何缺点吗?



1> abahgat..:

在处理我们的Web应用程序时,我们通常会事先决定在视图页面中需要哪些对象/字段,并确保在分派到视图之前从模型中正确初始化了所有对象.

这可以通过(至少)三种方式实现:

    使用急切策略获取属性(例如FetchMode.JOIN,如果您使用的是Criteria API)

    显式初始化属性(即with Hibernate.initialize(property))

    通过调用适当的属性访问器隐式初始化属性

关于OpenSessionInView的缺点,你有没看过这个页面?



2> 小智..:

通常是处理问题的最佳方式,而不是做出全球决定进行急切的提取; 是使用"fetch"关键字与hql查询结合使用.

来自http://www.hibernate.org/hib_docs/reference/en/html/queryhql-joins.html

此外,"fetch"连接允许使用单个select来初始化值的关联或集合及其父对象.这在集合的情况下特别有用.它有效地覆盖了关联和集合的映射文件的外连接和延迟声明.有关更多信息,请参见第19.1节"获取策略".

来自Cat作为cat inner join fetch cat.mate left join fetch cat.kittens

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有