oym*_*oym 0 java spring hibernate lazy-loading
我有一个域对象,其属性是包含另一个域对象的集合.这是使用hibernate映射(最终在另一个表上执行连接)来完成的.默认情况下,Hibernate似乎懒得实例化这个集合.事实证明这是件好事,因为根据我需要显示的内容,我并不总是需要加载集合.
我的问题如下:在编写我的hibernate查询时(在我的DAO中),我使用以下内容来打开/关闭会话:
Session session = getSessionFactory().openSession();
//query goes here using the session var
session.close();
Run Code Online (Sandbox Code Playgroud)
问题是:当Hibernate最终懒洋洋地加载我的集合时,Session很久就被关闭了!我怎么能绕过这个?我假设我必须像我一样关闭会议......
这是我得到的错误:
SEVERE: failed to lazily initialize a collection of ...
Run Code Online (Sandbox Code Playgroud)
如果这是在webapp中发生的,那么对此的简单修复是使用OpenSessionInViewInterceptor或OpenSessionInViewFilter.这些会延迟会话的关闭,直到整个请求完成,允许您在呈现视图时导航延迟关联.
更通用的解决方案是重写您的查询,以便它们明确指定应该预先获取哪些关联.这使您可以在默认情况下保持关联的延迟,同时满足您希望它们急切获取的特殊情况.请参阅Hibernate文档中的"获取联接"的说明.
"fetch"连接允许使用单个select来初始化值的关联或集合及其父对象.这在集合的情况下特别有用.它有效地覆盖了关联和集合的映射文件的外连接和延迟声明
| 归档时间: |
|
| 查看次数: |
1818 次 |
| 最近记录: |