zoukankan      html  css  js  c++  java
  • 十三、解决懒加载

      懒加载几种情况(方式) 首先我们要明确一点 Domain Object 是非final的,才能实现懒加载。

      解决懒加载的方法:

    1. 明确初始化 在session还没有关闭时,访问一次 xxx.getXxx(),强制访问数据库。或者 Hibernate.initialize(xxx)

       1.1在登录验证的时候,显示访问

    //登录验证,如果验证成功则返回该employee对象,否则返回空
        public Employee loginCheck(Employee e) {
            // TODO Auto-generated method stub
            String hql="from Employee where id=? and password=?";
            List<Employee> list = sessionFactory.getCurrentSession().createQuery(hql).setInteger(0, e.getId()).setString(1, e.getPassword()).list();
            
    //        //显示初始化懒加载,但是好像不起作用,不如强制访问getDepartment().getName()
    //        Hibernate.initialize(Department.class);
            
            //在登录验证的时候,此时session创建好了去数据库查登录信息,还没关闭,我们强制让session帮我们查查部门信息
            list.get(0).getDepartment().getName();
            
            if(list.size()>0) return list.get(0);
            else return null;
        }

      

    2. 在对象映射文件中配置,lazy=“false”

        2.1在Department.hbm.xml文件中

    <hibernate-mapping package="com.myz.domain">
        <class name="Department" table="department" lazy="false">
            <cache usage="read-write"/>
            <id name="id" type="java.lang.Integer">
                <generator class="assigned"></generator>
            </id>
            <property name="name" type="java.lang.String">
                <column name="name"></column>
            </property>
            
            <!-- 一个部门可以有多个雇员-->
            <set name="emps" cascade="save-update">
                <key column="department_id"></key>
                <one-to-many class="Employee"/>
            </set>
        </class>
    </hibernate-mapping>

      以上两种方法都不太好,因为不管我们的jsp用不用loginUser.department.Name,它们在登录的时候都会发出sql语句去查询,如果我们不知道用不用,而希望需要的时候它再发出sql语句查询,请用以下方法

    3. 在ssh中,可以实现在service层,标注方式解决懒加载.

    4. openSessionInView 这个往往需要过滤器配合使用(web程序)。

        4.1在web.xml文件中,添加过滤器

    <!-- 配置 OpenSessionInViewFilter解决懒加载,本质是过滤器,延长事务处理的时间,即延长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>
  • 相关阅读:
    VMWare安装Win10虚拟机 昆明
    c#游戏进程杀手 昆明
    图解机器学习读书笔记CH2
    深度学习中的线性代数知识详解
    图解机器学习读书笔记CH1
    三分算法
    POJ 2356 Find a multiple【抽屉原理】
    POJ 1170 Shoping Offers(IOI 95)
    HDU 2438 Turn the corner【三分】
    HDU 3552 I can do it! 【贪心】
  • 原文地址:https://www.cnblogs.com/myz666/p/8439009.html
Copyright © 2011-2022 走看看