好久没有看有关hibernate的东西了 最近我们做项目都是用的Itatis 有朋友问我有关hibernate的问题,有重新温习了一下 今天看了一个比较好的博文 弄出来 和大家分享一下
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属性不会影响到关联对象!!!
分享到:
相关推荐
在开始使用Hibernate之前,需要将其依赖添加到项目中,通常是通过Maven或Gradle来管理。接着,配置hibernate.cfg.xml文件,指定数据库连接参数、方言、实体扫描路径等信息。 **3. 实体类与映射文件** 在Hibernate中...
通过《Hibernate4.1.11中文手册》,开发者不仅可以深入理解Hibernate的工作原理,还能掌握其在实际项目中的应用技巧,从而提高开发效率和软件质量。这份资源对于任何使用Java进行数据库开发的人来说,都是一份宝贵的...
19.1.7. 使用延迟属性抓取(Using lazy property fetching) 19.2. 二级缓存(The Second Level Cache) 19.2.1. 缓存映射(Cache mappings) 19.2.2. 策略:只读缓存(Strategy: read only) 19.2.3. 策略:读/...
19.1.7. 使用延迟属性抓取(Using lazy property fetching) 19.2. 二级缓存(The Second Level Cache) 19.2.1. 缓存映射(Cache mappings) 19.2.2. 策略:只读缓存(Strategy: read only) 19.2.3. 策略:读/...
19.1.7. 使用延迟属性抓取(Using lazy property fetching) 19.2. 二级缓存(The Second Level Cache) 19.2.1. 缓存映射(Cache mappings) 19.2.2. 策略:只读缓存(Strategy: read only) 19.2.3. 策略:读/...
在Hibernate中文API中,你可以找到关于各种接口、类和枚举的详细说明,这些组件构成了Hibernate的核心功能。例如,`Session`接口代表了数据库会话,用于执行查询和事务操作;`SessionFactory`是创建`Session`的工厂...
6. **缓存机制**:讨论Hibernate的两级缓存(一级缓存在Session中,二级缓存可选),以及如何配置和使用缓存来提高性能。 7. **懒加载和立即加载**:解释实体的加载策略,如懒加载(lazy loading)和立即加载...
在Java的ORM框架Hibernate中,注解是一种强大的工具,它允许开发者无需XML配置就能实现对象关系映射。本文主要总结了Hibernate中常见的注解用法,涵盖了类级别和属性级别的注解,以及与主键和非主键相关的注解。 1....
`hibernate-mapping`节点是Hibernate映射文件中的顶级节点,用于定义一系列配置选项,控制整个映射文件的行为和映射规则。这些配置包括数据库连接细节、默认的映射策略等。 - **schema**: 定义了数据库的Schema名称...
19.1.7. 使用延迟属性抓取(Using lazy property fetching) 19.2. 二级缓存(The Second Level Cache) 19.2.1. 缓存映射(Cache mappings) 19.2.2. 策略:只读缓存(Strategy: read only) 19.2.3. 策略:读/...
在本教程中,“Hibernate 详细带大量说明实例源码 精典的ORM讲解!”涵盖了多个关键知识点,旨在通过详实的代码示例和解释,帮助开发者深入理解Hibernate的使用。 1. **对象关系映射(ORM)基础**: - Hibernate...
标题"Hibernate 中文api文档"表明我们关注的是关于Hibernate的一个中文API文档,这通常是一个详尽的指南,包含了Hibernate框架的所有关键类、接口、方法及其使用说明,适合Java开发者使用,尤其是那些对英文文档阅读...
- **无注解之属性的默认值:** 如果没有显式使用注解,Hibernate会默认将类的属性映射到表中的列。 - **映射主键属性:** 主键映射通过`@Id`注解实现。 - **映射继承关系:** - **每个类一张表:** 每个子类对应...
描述中提到"hibernate 5.3.x 英文API 中文操作手册,方便学习使用,仅供参考",明确了文档具体是针对Hibernate 5.3.x版本,包括英文API和中文操作手册,旨在辅助学习和参考。这提示我们文档不仅涵盖了API的详细解释...
10. **延迟加载(Lazy Loading)**: 为提高性能,Hibernate允许对象属性的延迟加载,只有在真正使用时才会从数据库中加载。 11. **事件监听器和拦截器**: Hibernate提供了一套事件监听机制,允许开发者在特定操作...
在使用`Hibernate-javadoc4.2.1.chm`文件时,开发者可以通过查阅其中的类、接口和方法的详细说明,了解其功能和用法,解决开发过程中遇到的问题。这个文档包含了所有重要的API和示例,是深入学习和调试Hibernate的...
Hibernate作为Java领域中流行的ORM(对象关系映射)框架,提供了丰富的注解来简化实体类与数据库表之间的映射。本文将深入解析一系列关键注解,帮助理解Hibernate如何实现这一过程。 #### 1. `@Entity`与`@Table` ...
Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者在Java应用程序中使用对象模型,而无需直接处理SQL语句。这个“Hibernate.zip”压缩包包含的是Hibernate的核心库,通常用于简化数据库交互。以下是...
这个文档最全版可能涵盖了上述所有内容,以及更详细的使用示例和配置说明,帮助开发者深入理解和应用Hibernate 4.0.0 Beta5框架。通过阅读这份文档,你可以全面了解Hibernate的基础概念、配置、API使用以及最佳实践...
6. **延迟加载(Lazy Loading)**: Hibernate支持实体属性的懒加载,只有当真正需要某个属性时,才会执行数据库查询,提高了性能。 7. **实体关系映射(E-R Mapping)**: Hibernate支持一对一、一对多、多对一、多...