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>
  • 相关阅读:
    【Gym
    [matlab工具箱] 曲线拟合Curve Fitting
    数学建模 常用
    “这么多人给我作证,我不怕”
    超星尔雅刷课辅助
    细思《都挺好》
    P5173 传球
    [ICPC 北京 2017 J题]HihoCoder 1636 Pangu and Stones
    CF 1131C Birthday
    CF 634A Island Puzzle
  • 原文地址:https://www.cnblogs.com/myz666/p/8439009.html
Copyright © 2011-2022 走看看