今日,实验了下,Hibernate的fetch=FetchType.Lazy(延迟加载)
延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。
这次收获颇多:
现在和大家一起分享.
Person 类:
private int person_id;
private String testName;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
private List<Book> books;
Book:private int testId;
private string bookName
Book类与Person类相关联
在查询时候:
person=getHibernateTemplate().load(Person.class,1);
当我是这样的输出语句时,
System.out.println(person.getTestName());
SQL语句是这样的:
select person0_.person_id as person1_1_0_, person0_.person_Name as person2_1_0_ from person person0_ where person0_.person_id=?
上面的语句:即就是查询本类Person的相关实体属性 (注意,它并不会查询Book类相关属性)
当出输出这样的语句时候。
System.out.println(((Book)((List<Book>)person.getBooks()).get(0)).getBookName());
它就会在查询语句中添加这样一条SQL语句,
select books0_.bId as bId1_, books0_.bookId as bookId1_, books0_.bookId as bookId0_0_, books0_.bookName as bookName0_0_, books0_.bId as bId0_0_ from book books0_ where books0_.bId=?
即根据 person_id数据索引去查询Book类相关属性。
我上网查资料,有人建议这样:
对于集合尽量使用Lazy,对于对象可以使用EAGER
但是我个人认为这个也不能那么准确的定义它。还是要根据项目需求来定义选用哪种加载方式
的确,延迟加载给我们带来了数据性能的提高。
下面是加载的几种方式:
Hibernate的数据加载方式:(转自博客http://dsh.iteye.com/blog/417462)
1.即时加载 immediately loading
实体加载完成后,立即加载其关联的数据。
2.延迟加载lazy loading
实体相关联的数据在第一次访问时再进行读取。
3.预先加载 eager loading
与immediately loading类似,但实体和相关联的数据是通过一条sql同时读取。
4.批量加载 batch loading
?
还有就是Hibernate的缓存:
<cache usage=”read-only”/> 只缓存数据索引
<cache usage=”read-write”/> 缓存数据索引和集合实体
缓存在数据库数据性能上体现得很好。
我先去实践,再根据自己实践谈谈缓存机制。
分享到:
相关推荐
“Hibernate 级联查询”是指在使用Hibernate这个Java持久化框架时,如何处理对象之间的关联查询。Hibernate提供了级联操作来简化数据的保存、更新和删除等操作,使得开发者无需手动编写复杂的SQL语句,就能实现关联...
在Hibernate中,级联操作(Cascading Operations)是一种高级特性,它使得对象之间的关联关系在数据库层面得以同步更新。当我们对一个实体对象进行操作时,可以设置级联属性,让这些操作自动传播到与之相关联的其他...
在Java持久化框架Hibernate中,级联操作是处理对象关系映射(ORM)时非常重要的一个特性。级联操作允许我们在对一个实体进行操作时,自动地影响与之相关的其他实体,无需显式地处理这些关联。在这个" Hibernate级联...
在处理一对多、多对一等关联关系时,Hibernate提供了级联操作功能,使得对主表的增删改查能够自动影响到关联的从表。本主题将深入探讨"hibernate级联增删改查",特别是针对"t_card主表"和"t_person从表"的关系。 ...
在Java的持久化框架Hibernate中,级联操作(Cascade)和反转(Inverse)是两个重要的概念,它们主要用于管理对象关系模型中的关联关系。在一对多的关系中,这些特性可以帮助简化数据操作,提高代码的可读性和维护性...
3.3、Hibernate级联关系(Av839011656,P3).mp4
本文将深入探讨如何在Hibernate中处理Many-to-Many关系的级联保存、级联更新和级联删除。 一、Many-to-Many关系基础 在数据库设计中,Many-to-Many关系意味着两个实体之间存在多对多的关系。例如,学生可以选修多门...
在Java的持久化框架Hibernate中,级联操作是一种非常实用的功能,它允许我们在对一个对象进行操作时,自动处理与其关联的对象。级联删除(Cascade Delete)就是其中之一,当删除一个对象时,会根据配置自动删除与之...
在 Hibernate 中,级联操作(Cascade)和反向属性(Inverse)是管理对象关系的重要概念,特别是在处理一对多(One-to-Many)或多对一(Many-to-One)关系时。 **级联操作(Cascade)** 级联操作定义了当主对象被...
在探讨Hibernate框架中的级联操作(cascade)与控制权反转(inverse)之前,我们需要先对Hibernate有一个基本的理解。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用提供了一种将对象模型映射到...
在IT领域,尤其是在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它允许开发者用面向对象的方式操作数据库。尽管随着Spring Data JPA等现代技术的崛起,Hibernate的使用频率有所下降,但其核心...
在Java持久化框架Hibernate中,一对多(One-to-Many)、多对一(Many-to-One)、级联(Cascading)、加载(Loading)和反转(Inversing)是关系映射的重要概念,它们对于理解如何在数据库和对象之间有效地管理关联至...
第七章_Hibernate_-_级联策略 第七章
总的来说,这个项目展示了如何使用Hibernate、Ajax和DWR来实现一个高效、用户友好的省市县三级级联选择功能。开发过程中涉及了ORM、MVC架构、数据库操作以及前端交互等多个方面,是学习和实践Web开发技能的好实例。
Ajax+struts+hibernate实现级联菜单 Ajax+struts+hibernate实现级联菜单 Ajax+struts+hibernate实现级联菜单
### Hibernate级联(Cascade)详解 #### 一、概述 Hibernate 是一款强大的对象关系映射 (ORM) 框架,它允许开发人员将 Java 对象模型映射到数据库表,从而极大地简化了数据访问层的开发工作。在 Hibernate 中,...
本文档主要讨论了使用Hibernate的HQL(Hibernate Query Language)进行级联查询时需要注意的一些事项。 1. 数据库模型 - `Employee`表:包含`id`(主键)、`empname`(员工姓名)、`empage`(员工年龄)、`context...
本项目“hibernate3.2的级联关系_JavaProject”旨在帮助初学者理解并实践Hibernate 3.2中的级联关系,包括一对多、一对一和多对多这三种主要的关系类型。 首先,让我们深入了解一下级联关系。级联关系在Hibernate中...
在Hibernate 3.2版本中,级联关系是处理对象间关联的重要特性,特别是自身一对多双向关联,这允许一个实体类实例与多个相同类型的其他实例相关联,而且这种关联是双向的。现在,让我们深入探讨这个主题。 首先,...