Hibernate延迟加载问题

简介:   Hibernate延迟加载是项目中非常常用的技术。通过使用Hibernate延迟加载机制可以在加载数据是不必加载全部数据,而是只加载我们需要的那部分,其余部分在需要使用时才从数据库装载,以此来减少数据量提高系统性能。

  Hibernate延迟加载是项目中非常常用的技术。通过使用Hibernate延迟加载机制可以在加载数据是不必加载全部数据,而是只加载我们需要的那部分,其余部分在需要使用时才从数据库装载,以此来减少数据量提高系统性能。

  Hibernate延迟加载大致可以分为两类,一类是延迟属性加载,另一类是延迟关联实体加载。

属性加载

  属性加载又可以分为两类,一类是集合属性,一类是非集合属性。

关联加载

  关联加载也分两种情况,一种是多对一,另一种是一对一。

  今天遇到的问题属于关联加载的,A、B部门属于关联部门,B属于A的子部门,当查询B部门的时候并没有用的A部门的相关属性,所以为了保证性能我们并没有将A部门的信息加载到页面。但是当我们在B部门页面点击”返回上一级“按钮是,需要传入一个A部门的ID,这时候B部门信息已经显示到页面,相关的session已经关闭了,系统会抛出异常,错误信息如下:

  

解决办法:

(1)将延迟加载属性设置为false

  

  这种方法最简单,但是这样我们就不能用hibernate的延迟加载机制了,也就是说每次加载都有可能加载很多用不到的数据,影响系统性能,这是不推荐的。

(2)在web.xml中配置openSessionInViewFilter这个过滤器,必须将openSessionInViewFilter过滤器配置中Struts2核心过滤器之前。

<!-- 配置Spring的用于解决懒加载问题的过滤器 -->  
    <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>*.action</url-pattern>  
    </filter-mapping>  
  
  过滤所有的*.action。这种方法,让session关闭延迟在界面层才关闭。这样在界面取数据的时候就不会报错啦。

目录
相关文章
|
4月前
|
Java 数据库连接 数据库
|
SQL 缓存 Java
Hibernate之加载策略(延迟加载与即时加载)和抓取策略(fetch)
  假设现在有Book和Category两张表,表的关系为双向的一对多,表结构如下:   假设现在我想查询id为2的那本书的书名,使用session.get(...)方法: 1 Session session=HibernateUtil.
1274 0
|
Java 数据库连接 数据库
Hibernate的延迟加载
 ----------------------------------------------  一 ------------------------------------------- 转自:http://blog.csdn.net/java958199586/article/details/7069901 hibernate延迟加载(懒加载)详解 一.什么是懒加载?他的作
1260 0
|
SQL Java 数据库连接
hibernate 延迟加载
Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载。Hibernate 通过这种延迟加载来降低系统的内存开销,从而保证 Hibernate 的运行性能。
785 0
|
Java Spring 数据库连接
hibernate 延迟加载的错误 failed to lazily initialize a collection of role
这个问题一般出现在一对多的情况下,解决的方法有两种1、设置lazy=false如果是用annotation,则配置如下@OneToMany(   targetEntity = CourseAuthorizationItem.class,   cascade = {CascadeType.PERSIST, CascadeType.MERGE},   mappedBy = "course",
2269 0
|
SQL Java 数据库连接
Hibernate延迟加载
1、类级别的延迟加载  1、   是通过session.load方法实现的    在映射文件中:     &lt;class name="cn.itcast.hibernate717.lazy.Customer" table="customer" catalog="test" lazy="true"&gt;      lazy表示延迟加载    2、   当映射文件中,class元素的属性la
1070 0
|
Java 数据库连接 数据格式
Hibernate延迟加载问题
Hibernate的映射配置单如下: DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.
855 0
|
SQL Java 数据库连接