问题描述:在使用Hibernate和Struts是经常会遇到如下BUG:

org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.hibernate.LazyInitializationException: 
failed to lazily initialize a collection
of role: blank.domain.Route.stopRoutes, could not initialize proxy - no Session

解决方案:

方法一、在web.xml中添加Session过滤器的配置

  <!-- 延迟关闭session 的顺序位于struts2过滤之上 否则延迟关闭session不起作用 -->
     <filter>  
         <filter-name>opensession</filter-name>  
          <filter-class>  
            org.springframework.orm.hibernate4.support.OpenSessionInViewFilter  
          </filter-class>  
           <init-param>    
               <param-name>flushMode</param-name>    
              <param-value>AUTO</param-value>    
         </init-param>   
          <init-param>    
               <param-name>singleSession</param-name>    
              <param-value>true</param-value>    
          </init-param>    
      </filter>  
      <filter-mapping>  
         <filter-name>opensession</filter-name>  
         <url-pattern>/*</url-pattern>  
     </filter-mapping>

由于org.springframework.orm.hibernate4.support.OpenSessionInViewFilter这个类中指定sessionFactoryBeanName的值为“sessionFactory”

所以,在Spring配置文件中,与SessionFactory相关的配置需要把名称改为“sessionFactory”,否则会报找不到sessionFactory的BUG。

具体如下:

  <!-- SessionFactory工厂 -->
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="configLocation">
            <value>classpath:hibernate.cfg.xml</value>
        </property>
    </bean>

<!-- 配置HibernateTemplate模板 -->
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

<!-- 配置HibernateDaoSupport -->
    <bean id="hibernateDaoSupport"
        class="org.springframework.orm.hibernate4.support.HibernateDaoSupport"
        abstract="true">
        <property name="hibernateTemplate" ref="hibernateTemplate" />
    </bean>

<!-- Hinernate的事务管理器 -->
    <bean id="hibernateTransactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

方法二、在Hibernate的*.hbm.xml配置文件中将lazy属性设置为false(不推荐)。

案例:

  stopRoute.hbm.xml中

  <many-to-one name="route" class="Route" cascade="save-update" fetch="join" lazy="false">
            <column name="rid" />
        </many-to-one>
        <many-to-one name="stop" class="Stop" cascade="save-update" fetch="join" lazy="false">
            <column name="sid" />
        </many-to-one>

  Route.hbm.xml中

  <set name="stopRoutes" inverse="true" cascade="delete" lazy="false">
            <key>
                <column name="rid" />
            </key>
            <one-to-many class="StopRoute" />
        </set>

ssh整合之Session延迟加载问题的解决的更多相关文章

  1. ssh整合时报出的异常及解决办法

    com.opensymphony.xwork2.inject.DependencyException: com.opensymphony.xwork2.inject.ContainerImpl$Mis ...

  2. 用ssh整合时,用sessionfactory的getCurrentSession()获取不到session

    在用ssh整合时,一开始用的是getCurrentSession(),获取当前线程上的session,但是总是抛异常,不能获取. 后来用sessionfactory的openSession(),但是, ...

  3. 【转载】Ssh整合开发介绍和简单的登入案例实现

    Ssh整合开发介绍和简单的登入案例实现 Ssh整合开发介绍和简单的登入案例实现 一  介绍: Ssh是strtus2-2.3.1.2+ spring-2.5.6+hibernate-3.6.8整合的开 ...

  4. SSH整合总结(xml与注解)

    本人自己进行的SSH整合,中间遇到不少问题,特此做些总结,仅供参考. 一.使用XML配置: SSH版本 Struts-2.3.31 Spring-4.3.5 Hibernate-4.2.21 引入ja ...

  5. Java - 框架之 SSH 整合

                        代码获取 十四. ssh 整合1 - 包 1. Struts jar 包    - Struts-2.xx\apps\stutrs2-blank\WEB-INF ...

  6. 三 Spring对于延迟加载问题的解决

    Spring提供了延迟加载问题的解决方法 什么是延迟加载? 延迟加载:lazy(懒加载) 执行到该行代码的时候不会发送语句,真正使用这个对象的属性的时候才会发送sql语句进行查询. 类级别延迟加载:指 ...

  7. 【Java EE 学习 67 下】【OA项目练习】【SSH整合JBPM工作流】【JBPM项目实战】

    一.SSH整合JBPM JBPM基础见http://www.cnblogs.com/kuangdaoyizhimei/p/4981551.html 现在将要实现SSH和JBPM的整合. 1.添加jar ...

  8. Spring第四天——SSH整合

    (从整合开始,使用回归使用eclipse) 一.三大框架版本:  struts2 hibernate5 spring4 二.SSH三大框架回顾: Hibernate: ORM思想 核心配置文件: 单独 ...

  9. SSH整合简单例子

    说明:简单SSH整合,struts版本2.3.32,spring版本3.2.9,hibernate版本3.6.10 一.开发步骤 1 引jar包,创建用户library.使用的包和之前博文相同,可以参 ...

随机推荐

  1. StatusStrip控件

    态栏用于显示用户状态的简短信息.   StatusStrip控件是由system.windows.forms.statusStrip类提供,作用是在应用程序中标识对话框底部的一栏,通常用于显示应用程序 ...

  2. jQuery选择器,外加例子讲解

    jQuery选择器的优势: (1) 代码更简单(2) 支持CSS1到CSS3选择器(3) 完善的处理机制 jQuery选择器的分类 (1) 基本选择器 基本选择器是jQuery中使用最多的选择器,它又 ...

  3. 撩课-Web大前端每天5道面试题-Day11

    1. 如何手写一个JQ插件? 方式一: $.extend(src) 该方法就是将src合并到JQ的全局对象中去: $.extend({ log: ()=>{alert('撩课itLike');} ...

  4. Spring Boot 打包jar部署服务器

    部署方式:打包成jar部署 部署方式有两种,一种是传统的war包,另一种是打包成jar,推荐第二种方式部署 部署准备 1. jar包内置tomcat,无需服务器安装tomcat环境 2.需要JDK,且 ...

  5. MySQL之多表查询练习

    一.表格 表一  emp 表二 dept 表三 salgrade; 表四 年度利润表 二.习题 1. 查出至少有一个员工的部门.显示部门编号.部门名称.部门位置.部门人数. 2. 列出所有员工的姓名及 ...

  6. MySQL数据库的备份与恢复命令

    1.数据库导出SQL脚本 启动MySQL服务器 输入:mysqldump -u root -p  数据库名>生成脚本文件路径 输入登录密码,回车键 例如: $ mysql.server star ...

  7. ajax+json+ashx实现一个页面多个tab的分页

    1:项目功能需求:我的荣誉.审核中的荣誉.审核通过的荣誉在一个页面分别作列表展示.每个tab都需要分页,对实现的功能做个简单总结. 2:前台页面:引用的DBPage.js和pageCss.css实现分 ...

  8. JavaWeb学习总结(四):Servlet开发(二)

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

  9. react context toggleButton demo

    //toggleButton demo: //code: //1.Appb.js: import React from 'react'; import {ThemeContext, themes} f ...

  10. SignalR实时通信

    /// <summary> /// Message集线器类 /// </summary> [HubName("chathub")] public class ...