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

网友投稿 220 2022-09-22


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

目录hibernate一对多注解懒加载失效经排查,问题出在controller这边解决方法Hibernate懒加载异常说明及其解决懒加载异常出现的原因解决方案1解决方案2解决方案3

hibernate一对多注解懒加载失效

在House类里有关联HouseInfo,设置了懒加载

但是页面ajax返回还是有HouseInfos的数据。

经排查,问题出在controller这边

@response注解启用jackson框架对House进行解析

然后调用了每个属性的get方法,自然houseInfos的懒加载就失效了

解决方法

给houseInfos字段加上@jsonIgnore注解忽略json解析

Hibernate懒加载异常说明及其解决

在集成ssh2三大框架的时候很容易就会造成懒加载异常,通常显示的错误信息是:

org.hibernate.LazyInitaxZpBZHializationException: 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 List questionList=new ArrayList();

}

class Question{

  private Long id;

}

方法是http://强行在service层面是初始化代理对象.

public Survey getSurveyWithChildren(Long sid){

   Survey s = surveyDao.getEntity(sid);

  //强行初始化pages和questions集合

   for(Page p : s.getPages()){

    p.getQuestions().size();

  }

   return s;

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:CCNP(BSCI)实验:BGP实验利用路由反射器使全网互通
下一篇:CCNP(BSCI)实验:IPv6 EIGRP
相关文章

 发表评论

暂时没有评论,来抢沙发吧~