hibernate的延时(懒)加载异常
程序员文章站
2022-04-13 13:09:34
...
问题描述:
failed to lazily initialize a collection of role: com.gmako.entity.UserInfo.extendsUserInfos, no session or session was closed
问题解析:
关于lazy机制:
延迟初始化错误是运用Hibernate开发项目时最常见的错误。如果对一个类或者集合配置了延迟检索策略,那么必须当代理类实例或代理集合处于持久化状态(即处于Session范围内)时,才能初始化它。如果在游离状态时才初始化它,就会产生延迟初始化错误。
解决方法:
1、设置lazy=false
如果是用annotation,则配置如下
@OneToMany(
targetEntity = CourseAuthorizationItem.class,
cascade = {CascadeType.PERSIST, CascadeType.MERGE},
mappedBy = "course", fetch=FetchType.EAGER
)
将fetch类型设置成直接获取
2、就是使用filter,过滤所有的链接
如果在使用filter的时候,要配置事务处理,否则会导致session处于只读状态而不能做修改、删除的动作
<web-app>
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
</web-app>
2、就是使用modelPage,将数据库中查询到的数据拷贝到显示模型里面,将显示模型返回到页面中,获取里面的值,断绝再去查询数据库而导致的延时加载
上一篇: 【问题日记】KindEditor编辑器
下一篇: kindeditor编辑器的使用