hibernate中lazy的使用
lazy,延迟加载
Lazy的有效期:只有在session打开的时候才有效;session关闭后lazy就没效了。
lazy策略可以用在:
* <class>标签上:可以取值true/false
* <property>标签上,可以取值true/false,这个特性需要类增强
* <set>/<list>等集合上,可以取值为true/false/extra
* <one-to-one>/<many-to-one>等标签上,可以取值false/proxy/no-proxy
6.1 get和load的区别:
* get不支持延迟加载,而load支持。
* 当查询特定的数据库中不存在的数据时,get会返回null,而load则抛出异常。
6.2 类(Class)的延迟加载:
* 设置<class>标签中的lazy="true",或是保持默认(即不配置lazy属性)
* 如果lazy的属性值为true,那么在使用load方法加载数据时,只有确实用到数据的时候才会发出sql语句;这样有可能减少系统的开销。
* //不会发出查询sql
System.out.println("group id=" + group.getId());
这里有一个问题,为什么加载主键的时候不需要发出sql语句。
6.3 集合(collection)的延迟加载:可以取值true,false,extra
* 保持集合上的lazy的默认值,此时的效果和lazy="extra"是基本一样的。
* 设置集合上的lazy=extra,此时的效果和lazy属性的默认值是基本一样的。但是推荐使用这个属性值,因为在统计时这种情况显得比较智能。当然延迟是有效果的。
* 设置集合上的lazy=false
true:默认取值,它的意思是只有在调用这个集合获取里面的元素对象时,才发出查询语句,加载其集合元素的数据
false:取消懒加载特性,即在加载对象的同时,就发出第二条查询语句加载其关联集合的数据
extra:一种比较聪明的懒加载策略,即调用集合的size/contains等方法的时候,hibernate
并不会去加载整个集合的数据,而是发出一条聪明的SQL语句,以便获得需要的值,只有在真正需要用到这些集合元素对象数据的时候,才去发出查询语句加载所有对象的数据
6.4 Hibernate单端关联懒加载策略:即在<one-to-one>/<many-to-one>标签上可以配置
懒加载策略。可以取值为:false/proxy/no-proxy
false:取消懒加载策略,即在加载对象的同时,发出查询语句,加载其关联对象
proxy:这是hibernate对单端关联的默认懒加载策略,即只有在调用到其关联对象的方法的时候才真正发出查询语句查询其对象数据,其关联对象是代理类
no-proxy:这种懒加载特性需要对类进行增强,使用no-proxy,其关联对象不是代理类
注意:在class标签上配置的lazy属性不会影响到关联对象!!!
分享到:
相关推荐
### `lazy`属性详解 `lazy`属性是Hibernate中用于控制数据加载策略的一个关键参数,主要用于延迟加载关联对象。当一个对象被加载时,与其关联的对象不一定立即加载到内存中,而是等到真正需要使用时才加载,这就是...
**hibernate包详解** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库和面向对象编程之间架起桥梁的解决方案。通过使用Hibernate,开发人员可以避免直接编写SQL语句,而是用...
Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。`hibernate-mapping`是Hibernate配置文件中的一部分,用于定义Java对象与数据库表之间的映射关系。 1. `default-...
1. **延迟加载(Lazy Loading)**: 使用 `@OneToMany` 和 `@ManyToOne` 注解时,可以通过 `fetch = FetchType.LAZY` 实现关联对象的懒加载,降低初始化时的内存消耗。 2. **批处理(Batch Processing)**: 通过设置 ...
**hibernate持久化技术详解** Hibernate是一款强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用中操作数据库的强大工具。通过Hibernate,开发者可以将数据库操作转化为对Java对象的操作,大大降低了...
**hibernate多表查询详解** 在Java的持久化框架中,Hibernate是一个广泛使用的ORM(对象关系映射)工具,它允许开发者用面向对象的方式来处理数据库操作。在实际的业务场景中,数据往往不是孤立存在的,而是存在于...
### Hibernate注解详解 #### 一、实体Bean与基本注解 **实体Bean**是Hibernate框架中的核心概念之一,指的是那些被持久化的Java对象。在Hibernate中,通过使用`@Entity`注解来标记某个Java类,使其成为实体Bean。 ...
5. 使用懒加载(Lazy Loading):按需加载关联对象,减少初始加载数据量。 九、总结 Hibernate中文帮助文档为初学者提供了详尽的指导,从基础概念到实践操作,涵盖了Hibernate的各个方面。通过学习,开发者可以更好...
本教程“hibernate:java持久化对象详解02”是系列教程的一部分,它将继续深入探讨Java中的持久化对象与Hibernate的使用方法。在开始之前,建议先学习“hibernate:java持久化对象详解01”,以确保对基础概念有清晰的...
在这个“hibernate详解”主题中,我们将深入探讨Hibernate的核心概念、主要功能和实际应用。 1. Hibernate 概述: Hibernate 是Java平台上的一个持久化框架,它通过XML配置文件或注解将Java对象映射到关系数据库表...
《Hibernate注解详解》 Hibernate 是一款强大的Java对象关系映射(ORM)框架,它极大地简化了数据库操作。在Hibernate中,注解是用于描述Java类及其属性如何映射到数据库表的重要工具。本文将全面解析Hibernate中的...
6.4 Hibernate的内置标识符生成器的用法 6.4.1 increment标识符生成器 6.4.2 identity标识符生成器 6.4.3 sequence标识符生成器 6.4.4 hilo标识符生成器 6.4.5 native标识符生成器 6.5 映射自然主键 ...
在Java世界中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。本文将详细解析Hibernate中的注解使用,帮助理解如何通过注解简化数据库操作。 首先,实体Bean是...
总之,《Hibernate第3版开发手册详解》是每一位使用Hibernate进行数据持久化的Java开发者不可或缺的资源。通过深入学习本书,开发者不仅可以掌握Hibernate的基本使用方法,还能了解到其高级特性和最佳实践,从而有效...
### Hibernate 1+N问题详解 #### 一、Hibernate 1+N问题概述 在关系型数据库设计中,我们经常遇到“一对多”(1:N)这样的关系。而在对象关系映射(Object-Relational Mapping,简称ORM)框架如Hibernate中,这种...
### Hibernate Annotations 详解 #### 一、设置一个注解项目 **1.1 要求** 在开始之前,确保你的开发环境满足以下要求: - Java SE 5 或更高版本。 - 支持 EJB 3 或 JPA 的容器。 - Hibernate 3.4.0.GA 或更高...
在本篇关于“Hibernate注解详解(二)”的文章中,我们将深入探讨Hibernate框架中的一些核心注解,这些注解是Java开发者在进行对象关系映射(ORM)时不可或缺的工具。通过理解并熟练运用这些注解,可以极大地提高...
### Hibernate 使用手册知识点详解 #### 一、简介 Hibernate 是一款免费开源的对象关系映射 (ORM) 框架,它允许开发人员将 Java 应用程序中的对象映射到数据库表中的记录。通过 Hibernate,开发人员可以在不编写 ...
默认情况下,Hibernate使用Lazy策略,这意味着关联对象不会立即加载,除非显式访问它们。这有助于提高应用程序的性能,因为不必要的数据不会被加载到内存中。 #### 2. Lazy与Fetch结合的场景分析 在提供的代码示例...