Hibernate延迟加载

简介: 1、类级别的延迟加载 1、   是通过session.load方法实现的    在映射文件中:     <class name="cn.itcast.hibernate717.lazy.Customer" table="customer" catalog="test" lazy="true">      lazy表示延迟加载    2、   当映射文件中,class元素的属性la

1、类级别的延迟加载

 1、
 
  是通过session.load方法实现的
  
  在映射文件中:
  
   <class name="cn.itcast.hibernate717.lazy.Customer" table="customer" catalog="test" lazy="true">
   
   lazy表示延迟加载
   
 2、   当映射文件中,class元素的属性lazy为false时,session.load将不采用延迟加载的策略
   
 3、
 
  Session session = HibernateSessionFactory.getSession();
  Customer customer = (Customer)session.load(Customer.class, 2);//customer是一个代理对象
  System.out.println(customer.getId());//加载ID的时候,是不发出sql语句的    标示符
  System.out.println(customer.getName());//加载一般属性的时候,发出sql语句
  session.close();
  
 4、类级别的延迟加载只针对一般属性起作用
 
 
 5、当获取一般属性的值时,才要发出sql语句去加载这个值
 

2、属性级别的延迟加载  (JPA)

 

3、集合的延迟加载

 lazy   
 
  true    在加载集合中的数据的时候,发出sql语句  Iterator<Orders> iterator = ordersSet.iterator();
  
  
  false   在加载类级别的对象时就会发出sql语句   Customer customer = (Customer)session.get(Customer.class, 2);
  
    发出两条sql语句  
    
        1、查询customer表
        2、查询order表
  
  
  extra    更进一步的延迟加载策略
  
    在执行ordersSet.size()时,只会提取出这个表中的行数,属性的值是不提取出来的
    
    
    
 当类的延迟加载为true时,并且执行的是session.load方法时,这个时候,集合的延迟加载设置成lazy="false"是不起作用的
    
    

4、单端的延迟加载


 在加载多的一方时怎么样去加载一的一方:
 
  在many-to-one中,把lazy设置成false时,
  
      在得到Order时,就把customer的数据也加载出来了
      
      如果lazy设置成proxy时
      
      在得到order对象时,是不会加载customer对象中的数据,只有当customer执行get方法时,才要发出sql语句去加载其属性


说明一点:

 发出sql语句只能在session的环境下进行
 
 
总结:

 1、类级别的延迟加载
 
  在加载一个对象的时候,采取的加载策略
  
  
 2、关联级别的延迟加载
 
  在加载一个对象时,这个对象关联的对象的延迟加载策略
 
 
 
 
 延迟加载是hibernate为了提升性能的一种方式

目录
相关文章
|
4月前
|
Java 数据库连接 数据库
|
Java 数据库连接 Spring
Hibernate延迟加载问题
  Hibernate延迟加载是项目中非常常用的技术。通过使用Hibernate延迟加载机制可以在加载数据是不必加载全部数据,而是只加载我们需要的那部分,其余部分在需要使用时才从数据库装载,以此来减少数据量提高系统性能。
1067 0
|
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
|
Java 数据库连接 数据格式
Hibernate延迟加载问题
Hibernate的映射配置单如下: DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.
855 0
|
SQL Java 数据库连接