`

[转]Spring中解决Hibernate的lazy加载问题

阅读更多
今天又花了一天时间做单位的搜索网站,主要是增加权限管理的功能,完成了一部分功能,今天的时间主要花在了,spring中调用hibernate的问题,碰到两个问题。一个是双向多对多关联问题,一个是设置lazy=true时的问题。关于第一个多对多问题,原来是把多对多关联,分解为两个一对多关联,但是在spring中,调用getHibernateTemplate保存对象总是报错,呵呵,错误记不得了。也始终没弄明白什么原因。后来想想就改用,组件类集合来处理多对多关联,也就是用composite-element来映射. 第二个问题当lazy=true时,使用的是延迟加载,如果想在读取对象时显示的调用关联的对象,则在hibernate中要用initialize来显示调用,但是在spring中就会报disconnected session的错。
  上网找找资料,终于找到原因和解决的办法,在spring中通过getHibernateTemplate()来调用load和initialize,每一个getHibernateTemplate调用都会新开一个session,调用完就关闭了这个session.所以在第二次调用getHibernateTemplate().initialize来显示调用关联对象时就是报disconnected session的错。找到一个比较简单一点的解决的办法,就是用spring的OpenSessionInView.     OpenSessionInViewFilter可以等到请求回到filte以后再把session关掉,在web.xml里面配置一下就好用了:

       <filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate.support.OpenSessionInViewFilter</filter-class>
        <init-param>
            <param-name>singleSession</param-name>
            <param-value>false</param-value>
        </init-param>
     </filter>
     <filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
     </filter-mapping>
加上这段时就OK了~~
分享到:
评论

相关推荐

    集成spring的hibernate懒加载

    解决org.hibernate.LazyInitializationException: could not initialize proxy - no Session...

    ssh(structs,spring,hibernate)框架中的上传下载

     以上是Spring+Hibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单中file类型的组件映射为ActionForm中类型为org.apache.struts.upload. FormFile的属性来获取表单提交的文件数据。  工程...

    SpringMVC3Demo:Hibernate+Spring+Spring MVC+Bootstrap

    PS: 在Hibernate的配置文件如Role.hbm.xml中,权限这里有很多我是lazy="false",因为用户登录的时候检查权限肯定会拿到对应Role下的所有权限,所以没必要开启lazy加载中,但是如果你想添加其他功能使懒惰决定是否...

    jtechlog-lazy:JPA延迟加载

    它默认设置为 EclipseLink,您需要替换注释中的部分才能使用 Hibernate。 使用的技术:Spring、JSP、JSTL、JPA、EclipseLink、Hibernate、HSQLDB、SLF4J、Maven、Jetty gmail 上的 viczian.istvan

    test-lazy-hibernate

    重现步骤 : 启动服务器(MVN spring-boot:run) curl本地主机:8080 /员工/按公司/ 42 控制台日志显示该公司已被Hibernate加载

    ember-cli-spring-boot:ember-data 的 Spring Boot 集成

    ##Feature 详细信息 ###Lazy 加载所有关系所有DS.belongsTo()和DS.hasMany()关系都应该用{async : true}标记。 这意味着所有关系都是延迟加载的(Hibernate 喜欢这个)。 //blog export default DS . Model . ...

    Java学习笔记-个人整理的

    {2.8}框架中移动的小球}{59}{section.2.8} {2.9}抽象与接口}{59}{section.2.9} {2.10}访问控制}{60}{section.2.10} {2.10.1}类的属性}{60}{subsection.2.10.1} {2.10.2}类的方法}{61}{subsection.2.10.2} {...

    OA项目SSH整合框架

    3,在web.xml中配置 spring 的 OpenSessionInView 过滤器(解决抛LazyInitializationException的问题) 1,配置 &lt;!-- 配置 spring 的 OpenSessionInView 过滤器 --&gt; &lt;filter-name&gt;OpenSessionInView ...

    java面试题

    主要是将所有组件在spring提供的外部容器中加载。提高安全性,减低耦合性,使各个框架或者类之间的依赖性降低。 什么是声明式的事务管理?为什么要用?spring如何实现声明式的事务管理? 答:声明式的事务管理主要是将...

    Hibernate开发指南

    延迟加载(Lazy Loading)............................................................61 事务管理 ...........................................................................................................

    cms后台管理

    Jeecms是基于Spring注解,在自定义标签时对于实体类和dao service等注意注解的问题。 五 自定义标签及使用自己创建的表的实现过程 下面是我自己定义的标签mycontent_list 首先,在数据库里创建了一个jc_...

    ibatis 开发指南(pdf)

    “半自动化”的ibatis,却刚好解决了这个问题。 这里的“半自动化”,是相对Hibernate 等提供了全面的数据库封装机制的“全自动化” ORM 实现而言,“全自动”ORM 实现了POJO 和数据库表之间的映射,以及...

Global site tag (gtag.js) - Google Analytics