如何解决hibernate一对多注解懒加载失效问题

 更新时间:2021年10月15日 10:55:23   作者:山间明月江上清风_  
这篇文章主要介绍了解决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,改过滤器在view渲染时始终开启session,一劳永逸解决hibernate的懒加载问题,
      该过滤器必须配置在struts2过滤器之前,一般推荐使用(由于性能问题,在view渲染时始终开启session)-->
   <filter>
      <filter-name>openSessionInViewFilter</filter-name>
      <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
   </filter>
   <filter-mapping>
      <filter-name>openSessionInViewFilter</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>

解决方案3

例如涉及三个类 分别为Survey、Page、Question类,三个类的关联关系

class Survey{
  private Long id;
  private List<Page> pageList=new ArrayList<Page>();
}
class Page{
  private Long id;
  private List<Question> questionList=new ArrayList<Question>();
}
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;
 }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 实例讲解Java的Spring框架中的控制反转和依赖注入

    实例讲解Java的Spring框架中的控制反转和依赖注入

    这篇文章主要介绍了Java的Spring框架中的控制反转和依赖注入,Spring是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2016-02-02
  • 使用spring实现邮件的发送实例(含测试,源码,注释)

    使用spring实现邮件的发送实例(含测试,源码,注释)

    本篇文章主要介绍了使用spring实现邮件的发送实例,详细的介绍了使用spring配置实现邮件发送,含测试,源码,注释,有兴趣的可以下
    2017-05-05
  • IDEA连接远程服务器简化部署流程

    IDEA连接远程服务器简化部署流程

    笔者每次上线部署应用,都要使用第三方的客户端连接工具,比如 Xshell,FinalShell,Terminus 等,基本的流程步骤及其繁琐,基于这个原因,笔者今天探索通过 IDEA 连接远程服务器并上传文件,减少繁琐的部署步骤,需要的朋友可以参考下
    2024-01-01
  • java拷贝指定目录下所有内容到minIO代码实例

    java拷贝指定目录下所有内容到minIO代码实例

    这篇文章主要介绍了java拷贝指定目录下所有内容到minIO代码实例,创建桶 直接使用工具类先判断,再创建即可,创建文件夹,需要注意以"/"结尾,实际也是在minIO上创建文件,只是作为目录的表现形式展示,需要的朋友可以参考下
    2024-01-01
  • java如何获取实体类的属性名和属性值

    java如何获取实体类的属性名和属性值

    这篇文章主要介绍了java如何获取实体类的属性名和属性值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • SpringBoot3实现webclient的通用方法详解

    SpringBoot3实现webclient的通用方法详解

    Spring Boot WebClient 是 Spring Framework 5 中引入的一个新的响应式 Web 客户端,用于异步和响应式地与外部服务进行通信,下面我们就来看看SpringBoot3实现webclient的通用方法吧
    2024-04-04
  • shardingsphered 线程安全问题示例分析

    shardingsphered 线程安全问题示例分析

    这篇文章主要为大家介绍了shardingsphered 线程安全问题示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Spring中的ConversionService源码解析

    Spring中的ConversionService源码解析

    这篇文章主要介绍了Spring中的ConversionService源码解析,ConversionService是类型转换服务的接口,从名字就可以看出ConverterRegistry是要实现转换器注册表的接口,添加和移除Converter和GenericConverter,需要的朋友可以参考下
    2023-11-11
  • Java设计模式中的适配器模式

    Java设计模式中的适配器模式

    这篇文章主要介绍了Java设计模式中的适配器模式, 适配器模式是将一个类的接口适配成用户所期待的,一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中,需要的朋友可以参考下
    2024-01-01
  • maven依赖包冲突SLF4J: Class path contains multiple SLF4J bindings处理方法

    maven依赖包冲突SLF4J: Class path contains multiple SLF4J bi

    这篇文章主要给大家介绍了关于maven依赖包冲突SLF4J: Class path contains multiple SLF4J bindings的处理方法,这个问题通常是因为项目中存在多个SLF4J的实现绑定(bindings)导致的冲突,需要的朋友可以参考下
    2024-02-02

最新评论