`

hibernate lazy策略

阅读更多

lazy 策略可以用在:
* <class>标签上:可以取值true/false
* <property>标签上,可以取值true/false,这个特性需要类增强
* <set>/<list>等集合上,可以取值为true/false/extra
* <one-to-one>/<many-to-one>等标签上,可以取值false/proxy/no-proxy

重要的概念:
1、lazy 的概念,指在需要的时候才发出sql
2、lazy 策略只是在session打开期间才是有效的

注意:
Hibernate 类级别的lazy 加载策略:可以控制什么时候加载这些普通对象属性

测试单元的使用:
请先运行初时化程序InitData,在执行每个单元测试


Hibernate 集合属性的懒加载策略:

在集合属性上,可以配置懒加载策略,取值为:true/false/extra

true:默认取值,它的意思是只有在调用这个集合获取里面的元素对象时,才发出查询语句,加载其
     集合元素的数据
false:取消懒加载特性,即在加载对象的同时,就发出第二条查询语句加载其关联集合的数据
extra :一种比较聪明的懒加载策略,即调用集合的size/contains等方法的时候,hibernate 并不会去加载整个集合的数据,而是发出一条聪明的SQL语句,以便获得需要的值,只有在真正需要用到这些集合元素对象数据的时候,才去发出查询语句加载所有对象的数据


Hibernate 单端关联懒加载策略:即在<one-to-one>/<many-to-one>标签上可以配置
懒加载策略。

可以取值为:false/proxy/no-proxy
false:取消懒加载策略,即在加载对象的同时,发出查询语句,加载其关联对象
proxy:这是hibernate 对单端关联的默认懒加载策略,即只有在调用到其关联对象的方法的时候
      才真正发出查询语句查询其对象数据,其关联对象是代理类
no-proxy:这种懒加载特性需要对类进行增强,使用no-proxy,其关联对象不是代理类

注意:在class标签上配置的lazy 属性不会影响到关联对象!!!


Java代码 复制代码
  1. <hibernate -mapping>   
  2.     < class  name= "com.bjsxt.hibernate .Group"  table= "t_group" >   
  3.         <id name= "id" >   
  4.             <generator  class = "native" />   
  5.         </id>   
  6.         <property name= "name" />   
  7.     </ class >   
  8. </hibernate -mapping>    
<hibernate
-mapping>
	<class name="com.bjsxt.hibernate
.Group" table="t_group">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
	</class>
</hibernate
-mapping>	


Java代码 复制代码
  1. package  com.bjsxt.hibernate ;   
  2. import  org.hibernate .Session;   
  3.   
  4. import  com.bjsxt.hibernate .Group;   
  5. import  com.bjsxt.hibernate .HibernateUtils;   
  6.   
  7.   
  8. public   class  InitData {   
  9.   
  10.      public   static   void  main(String[] args) {   
  11.         Session session =  null ;   
  12.          try  {   
  13.             session = HibernateUtils.getSession();   
  14.             session.beginTransaction();   
  15.             Group group =  new  Group();   
  16.             group.setName( "java开发组" );   
  17.             session.save(group);   
  18.             session.getTransaction().commit();   
  19.         } catch (Exception e) {   
  20.             e.printStackTrace();   
  21.             session.getTransaction().rollback();   
  22.         } finally  {   
  23.             HibernateUtils.closeSession(session);   
  24.         }      
  25.     }   
  26.   
  27. }  
package com.bjsxt.hibernate
;
import org.hibernate
.Session;

import com.bjsxt.hibernate
.Group;
import com.bjsxt.hibernate
.HibernateUtils;


public class InitData {

	public static void main(String[] args) {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			Group group = new Group();
			group.setName("java开发组");
			session.save(group);
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}	
	}

}

 

Java代码 复制代码
  1.   
  2. package  com.bjsxt.hibernate ;   
  3.   
  4. import  org.hibernate .Session;   
  5.   
  6. import  junit.framework.TestCase;   
  7.   
  8. /**  
  9.  * 运行本单元测试的前提条件:  
  10.  * 设置<class>标签中的lazy ="true",或是保持默认(即不配置lazy 属性)  
  11.  *   
  12.  * @author Administrator  
  13.  *  
  14.  */   
  15. public   class  ClassLazyTest  extends  TestCase {   
  16.   
  17.      public   void  testLoadGroup1() {   
  18.         Session session =  null ;   
  19.          try  {   
  20.             session = HibernateUtils.getSession();   
  21.                
  22.              //不会发出查询sql   
  23.             Group group = (Group)session.load(Group. class 1 );   
  24.                
  25.              //不会发出查询sql   
  26.             System.out.println( "group id="  + group.getId());   
  27.                
  28.              //发出查询sql,加载数据到Group   
  29.             System.out.println( "group name="  + group.getName());   
  30.                
  31.              //不会发出查询sql   
  32.             System.out.println( "group name="  + group.getName());   
  33.         } catch (Exception e) {   
  34.             e.printStackTrace();   
  35.         } finally  {   
  36.             HibernateUtils.closeSession(session);   
  37.         }      
  38.     }   
  39.   
  40.      public   void  testLoadGroup2() {   
  41.         Session session =  null ;   
  42.         Group group =  null ;   
  43.          try  {   
  44.             session = HibernateUtils.getSession();   
  45.                
  46.              //不会发出查询sql   
  47.             group = (Group)session.load(Group. class 1 );   
  48.                
  49.         } catch (Exception e) {   
  50.             e.printStackTrace();   
  51.         } finally  {   
  52.             HibernateUtils.closeSession(session);   
  53.         }   
  54.          //不能正常输出,抛出了 LazyInitializationException,因为session已经关闭了   
  55.          //注意:Hibernate 支持Lazy 策略,只有session打开状态才有效        
  56.         System.out.println( "group name="  + group.getName());   
  57.            
  58.     }   
  59.        
  60.        

分享到:
评论

相关推荐

    gilead hibernate lazyload例子

    这就是Hibernate懒加载(Lazy Load)机制的作用所在。懒加载是一种延迟加载策略,只在真正需要时才加载关联的数据,以减少内存消耗和提高响应速度。 Gilead,全称为Hibernate for Flex,是用于Flex和Hibernate之间...

    hibernate的lazy策略forClass

    在这个场景中,我们关注的是"hibernate的lazy策略forClass",这涉及到如何对类的属性进行懒加载配置。 首先,我们需要理解Hibernate中的实体类(Entity)。在Hibernate中,一个Java类可以被映射为数据库中的一个表...

    hibernate在集合上的lazy策略

    标题“hibernate在集合上的lazy策略”指的是Hibernate如何处理与实体相关的集合类(如List、Set等)的懒加载。这篇文章可能详细解释了Hibernate在集合懒加载方面的实现方式以及其背后的原理。 懒加载的主要目的是...

    Hibernate lazy延迟加载

    在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的优化策略,它的核心思想是“延迟加载”或“按需加载”。默认情况下,当一个实体被加载时,并不会立即加载其关联的对象或集合,而是在真正需要...

    Hibernate lazy加载FOR Connection

    标题中的“Hibernate lazy加载FOR Connection”指的是Hibernate框架中的一种特性,即懒加载(Lazy Loading)。在Hibernate中,懒加载是一种优化策略,它推迟对关联对象的加载,直到真正需要使用这些对象时才进行加载...

    hibernate 中的lazy属性祥解.txt

    `lazy`属性是Hibernate中用于控制数据加载策略的一个关键参数,主要用于延迟加载关联对象。当一个对象被加载时,与其关联的对象不一定立即加载到内存中,而是等到真正需要使用时才加载,这就是懒加载(Lazy Loading...

    HIBERNATE检索策略

    这是HIBERNATE默认的抓取策略,当一个实体被加载时,与之关联的实体或集合并不会立即加载,而是采用延迟加载(Lazy Loading)的方式。当第一次访问关联实体或集合时,HIBERNATE会额外发送一条SELECT语句来抓取数据,...

    hibernate在单端关联上的lazy策略

    标题中的“hibernate在单端关联上的lazy策略”指的是Hibernate框架中的一种对象关系映射(ORM)技术,用于优化数据加载效率。在Hibernate中,懒加载(Lazy Loading)是一种延迟加载策略,它允许我们在需要时才加载...

    hibernate抓取策略和懒加载案例

    在Java的持久化框架Hibernate中,数据访问优化是至关重要的,而抓取策略(Fetch Strategy)和懒加载(Lazy Loading)则是实现这一目标的关键技术。本文将深入探讨这两个概念,并通过具体的案例进行分析。 首先,让...

    day36 06-Hibernate抓取策略:set集合上的抓取策略

    默认情况下,Hibernate采用懒加载(Lazy Loading)策略,即只有当真正需要访问关联对象时,才会去数据库加载。但这种策略可能导致大量的N+1查询问题,尤其是在处理集合时尤为明显。为了解决这个问题,Hibernate提供...

    Hibernate延时加载与lazy机制.doc

    Hibernate的延迟加载(Lazy Loading)和懒加载机制(Lazy Initialization)是优化ORM框架性能的重要策略。这个机制的主要目的是提高程序的效率,减少不必要的数据库交互,只在真正需要数据时才去加载它们。以下是对...

    当设置lazy=true时,怎样使用extjs和Hibernate

    当我们设置Hibernate中的实体属性`lazy=true`时,这是懒加载(Lazy Loading)机制的体现。懒加载是一种优化策略,它允许我们在需要时才加载关联的对象,而不是在初始加载实体时就加载所有关联数据,从而提高性能。 ...

    Hibernate Fetch 的作用

    默认情况下,Hibernate使用Lazy策略,这意味着关联对象不会立即加载,除非显式访问它们。这有助于提高应用程序的性能,因为不必要的数据不会被加载到内存中。 #### 2. Lazy与Fetch结合的场景分析 在提供的代码示例...

    day36 07-Hibernate抓取策略:many-to-one上的抓取策略

    今天我们要讨论的是Hibernate框架中的一个关键概念——抓取策略,特别是针对"many-to-one"关系的抓取策略。这篇博客将深入剖析这个主题,帮助你更好地理解和应用Hibernate。 Hibernate是Java领域中最流行的对象关系...

    hibernate5--4.检索方式及策略

    2. **Lazy Loading**: 默认情况下,Hibernate采用懒加载策略,只有在实际访问关联对象时才会发起数据库查询。这有助于提高性能,因为不是所有的关联数据都立即加载。 3. **Eager Loading**: 相反于懒加载,急加载会...

    Hibernate的检索策略

    ### Hibernate的检索策略详解 #### 一、概述 在Java持久化框架Hibernate中,检索策略是一种重要的机制,它主要用于控制对象何时以及如何加载到应用程序内存中。合理的检索策略不仅可以提高应用性能,还能简化代码...

    hibernate懒加载策略.doc

    在Java持久化框架Hibernate中,懒加载(Lazy Loading)是一种优化策略,用于提高应用程序的性能和效率。懒加载的基本思想是“按需加载”,即在实际需要数据时才进行数据库查询,而不是在对象初始化时一次性加载所有...

    hibernate面试题2

    【hibernate面试题2】涉及了许多关于Hibernate框架的核心知识点,包括检索策略、SQL日志显示、缓存策略以及Hibernate与其他技术(如Spring和Struts)的整合。下面将逐一详细解析这些概念。 1. **Hibernate检索策略*...

    Hibernate 经典例子全

    在`hibernate_fetch_1`示例中,我们了解到Hibernate的加载策略,包括Eager Fetching(即时加载)和Lazy Fetching(延迟加载)。即时加载会在查询时一起加载关联的对象,而延迟加载则只在真正需要时才执行数据库查询...

Global site tag (gtag.js) - Google Analytics