又一个因为延迟加载出现的错误Hibernate:could not initialize proxy - no Session

    xiaoxiao2021-04-18  72

    今天利用Hibernate写一个Demo的时候遇到个错误解决,字面意思是没有session,郁闷了老半天,终于发现问题

    我要查询的数据与其他表有多对一的关联关系,但是延迟加载设置为lazy,也就是说当我使用这个关联数据时才会去查询,而这个时候session早已关闭,就出现了上面的错误。

    解决方法有三个:

           1把lazy设成false。这个是最简单的办法,个人认为也是比较笨的方法。因为这是在用效率作为代价。

           2使用OpenSessionInViewFilter。这种方法是将session交给servlet filter来管理,每当一个请求来之后就会开

    启一个session,只有当响应结束后才会关闭。如下:

    <filter-name>hibernateFilter</filter-name> <filter-class> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter </filter-class> </filter <filter-mapping> <filter-name>hibernateFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>  

           上面的配置文件时在web.xml中配置的。

     

           3将hibernate的抓起策略改为join。也就是是left join fetch或inner join fetch语法。就是在<many-to-one../>中配

    置lazy="false" fetch="join"即可

     

    转载请注明原文地址: https://ju.6miu.com/read-675278.html

    最新回复(0)