如何解决hibernate一对多注解懒加载失效问题
目录
- hibernate一对多注解懒加载失效
- 经排查,问题出在controller这边
- 解决方法
- Hibernate懒加载异常说明及其解决
- 懒加载异常出现的原因
- 解决方案1
- 解决方案2
- 解决方案3
hibernate一对多注解懒加载失效 【如何解决hibernate一对多注解懒加载失效问题】
文章图片
在House类里有关联HouseInfo,设置了懒加载
但是页面ajax返回还是有HouseInfos的数据。
经排查,问题出在controller这边
文章图片
@response注解启用jackson框架对House进行解析
然后调用了每个属性的get方法,自然houseInfos的懒加载就失效了
解决方法
给houseInfos字段加上@JsonIgnore注解忽略json解析
Hibernate懒加载异常说明及其解决 在集成ssh2三大框架的时候很容易就会造成懒加载异常,通常显示的错误信息是:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
懒加载异常出现的原因
文章图片
我们在Action中调用Service中的方法,方法中开始时open session,当调用结束后close session,例如类User中有一个Department属性,我们使用Hibernate查询一个User时,hibernate默认是懒加载的,此时查询出的User不会把Department中所有的信息查询出来。
当session 关闭后我们在Result中(例如在jsp中打印department.name)使用到了Department的name属性时就会出现懒加载异常。
解决方案1
不用懒加载(不推荐)
解决方案2
文章图片
我们不在方法结束的时候关闭session,在执行完Action Result之后,通过过滤器关闭session,具体如下:
使用OpenSessionInViewFilter解决解决懒加载问题,在web.xml中配置:
openSessionInViewFilter org.springframework.orm.hibernate3.support.OpenSessionInViewFilter openSessionInViewFilter /*
解决方案3
例如涉及三个类 分别为Survey、Page、Question类,三个类的关联关系
class Survey{private Long id; private List pageList=new ArrayList(); }class Page{private Long id; private ListquestionList=new ArrayList (); }class Question{private Long id; }
方法是强行在service层面是初始化代理对象.
public Survey getSurveyWithChildren(Long sid){Survey s = surveyDao.getEntity(sid); //强行初始化pages和questions集合for(Page p : s.getPages()){p.getQuestions().size(); }return s; }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- parallels|parallels desktop 解决网络初始化失败问题
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 如何寻找情感问答App的分析切入点
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)