- 浏览: 1325460 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (896)
- spring4 (14)
- hibernate3 (26)
- spring2 (35)
- struts2 (55)
- struts1 (15)
- 设计模式 (15)
- java (172)
- mybatis3 (11)
- sql (17)
- mysql (13)
- jbpm (10)
- J2EE (45)
- tools (29)
- js (83)
- 数据结构 (13)
- Html (26)
- web (22)
- flex (33)
- Oracle (57)
- linux (49)
- 算法 (6)
- 其它 (12)
- easyui (1)
- bootstrap (13)
- xml (2)
- tomcat (1)
- redis (10)
- activemq (2)
- webservice (11)
- maven (2)
- springboot (1)
- ubuntu (1)
- python (14)
- rocketmq (1)
- springcloud (10)
- opencv (1)
最新评论
-
mike_eclipse:
Hashtable是线程不安全的吗?好像是线程安全的吧?
多线程之集合类 -
July01:
推荐用StratoIO打印控件,浏览器和系统的兼容性都很好,而 ...
lodop打印控件 -
xingcxb:
经过测试,假的,依旧会出现中文乱码!!!!store方法里面采 ...
java 读写Properties文件,不会出现中文乱码 -
tiger20111989:
...
Spring注解方式管理事务 -
zw7534313:
...
js 文字上下滚动 无间断循环显示
Hibernate数据检索策略:
Hibernate的数据检索策略是面向对象的策略,对于不同的数据检索情况,应使用不同的策
略,以提高效率和节省资源。经常使用的是立即检索和延迟检索,预先抓取是同一级别
的策略,因为它们是三选一的策略。用了其中一个则另外两个就都不可用,而且被延迟
加载的对象当最终被加载时,一定是使用立即加载的形式(指select 语句的形式).
批量检索可以优化立即和延迟加载,它们可以同时用。
(1) 立即检索:
立即检索的配置文件标识符为lazy=”false”.
对象的属性域、一对一关联对象、多对一关联对象,由于这些被关联的对象是”一”这
端,适合立即检索。而一对多和多对一关联对象则不适合设为立即检索.比如班级
和学生是一对多关系,当取得班级对象时,如果使用立即检索,就会把班级中所有学
生对象组装起来,然后把它们放入一个Set集合中,这个Set集合被班级对象引用。
(2)预先抓取:
Fetch=”join”
预先抓取指的是Hibernate通过select语句使用outer join (外连接,一般是左外连接left
outer join)来获得对象的关联实例或者关联集合。
它们之间的区别:
立即加载是立即填充附属物
延迟加载是只有实际使用到附属物时才会被填充。两者select语句形式是一样的,
都是通过id一条一条的查出来。 如果关联好多条记录,用立即检索或者延迟检索是不适合的。过多的sql语句必会造成 网络传输和响应的延迟,造成整体性能下降。使用预先抓取策略可以减少SQL语句
的条数。
实际使用中,一对多和多对多关系推荐使用延迟加载,而一对一和多对一关系
推荐使用预先加载。 1. 外连接: Query q=session.createQuery(“from Student as s left join s.team”) Stu.getTeam().getStudents().size() 会报LazyInitializationException异常。 这种指明HQL的方式,将忽略配置文件的所有策略。 2. 预先抓取: 将上面的HQL语句由左外连接改为预先抓取。 Query q=session.createQuery(“from Student as s left join fetch s.team”) Hibernate仅在第一层关联时忽略配置文件的预先抓取,在更深的层次,按照配置文件设置的 策略取得对象。
批量加载: 批量加载总是和立即或延迟加载联系在一起的,分为批量立即加载和批量延迟回载,可 以用于以下情况: 1. 一对多、多对多(末端为多)的情况,以set为例: <set name=”students” inverse=”true” batch-size=”3”> <key column=”team_id”/> <one-to-many class=”model.Student”/> </set> 2. 一对一、多对一(末端为一)的情况:如果要对末端为一的关联设置批量加载,要在“一” 这端的类配置文件中进行设置,比如学生对班级是多对一关系,要实现对班级的批量加载, 应设置如下: <class name=”model.Team” table=”team” batch-size=”3”> (1) 批量立即加载: Query q=session.createQuery(“from Team t”); 如果在配置文件中设置了学生集合为batch-size=3,也就是批量加载学生集合的数量是3,如 果有100个班级,因为设置了批量加载,所以要加载100/3=33还有剩一个学生再加载一 次,共需要发送SQL语句34次。Batch-size设得太大,将会使延迟加载失去意义。 (2) 批量延迟加载: 如果数据被设置了延迟加载,当此数据最终被加载进来时,也可以对它进行批量加载。
发表评论
-
hibernate Search
2010-10-15 10:09 1408hibernate Search 使用过lucene的人都 ... -
org.hibernate.LazyInitializationException: could not initialize proxy - no Sessi
2010-09-10 15:57 20191.设置里 lazy = "false" ... -
Java、hibernate、sql类型对照
2010-08-09 08:48 1501基本值类型: Java基本类型、对应的Hibernate映射 ... -
Hibernate事务隔离级别
2010-08-09 08:46 6270Hibernate事务隔离级别: 隔离级别 ... -
Hibernate数据检索策略
2010-08-06 15:58 1346Hibernate数据检索策略:Hibernate的数据检索策 ... -
生成model类的serialVersionUID
2010-06-25 16:36 1126生成model类的serialVersionUID: 在命令 ... -
spring 与 hibernate Annotation配置(entry)
2010-06-13 16:53 2040(5)TCompanyInfo.java import ... -
Hibernate的复杂用法HibernateCallback
2010-06-13 09:00 1139HibernateTemplate还提供一种更加灵活的方式来操 ... -
hibernate3与spring2零配置
2010-06-11 15:19 1411ssh除了xml配置之外,还可以用标注式配置: (1)sp ... -
hibernate3 annotation 的实例 3 (one to many)
2010-03-24 15:19 2106http://bigcat.easymorse.com/?p= ... -
hibernate annotation spring
2010-03-24 08:35 1096http://2625962-163-com.iteye.co ... -
hibernate3 annotation 的实例 2
2010-03-23 15:51 1814实例二:(主键sequence策 ... -
hibernate3 annotation的实例
2010-03-23 14:55 1996实例一:一个对象的增删改查: import java. ... -
query specified join fetching, but the owner of the fetched association
2010-03-04 09:57 1973错误原因分析: 首先看HQL语句: ... -
illegal attempt to dereference collection
2010-03-04 09:12 3700首先说一句:是版本的问题! 我写的hql为: from D ... -
深化学习hibernate
2010-01-29 14:10 11293.4.5. 查询语言中 ... -
查询hibernate 部分数据
2010-01-29 10:56 1408hibernate查出来人部分数据基本上是数组,有的时候需要对 ... -
解决hibernate中的lazy的问题
2010-01-28 11:38 1414<many-to-one name="TCu ... -
hibernate 批量添加
2009-12-29 13:37 2066public void createRolePermissio ... -
hibernate 常见错误
2009-12-24 12:52 9711.org.hibernate.LazyInitializat ...
相关推荐
描述:本文深入解析了HIBERNATE的检索策略,为读者提供了一条清晰的学习路径,重点分析了HIBERNATE中的抓取策略及其应用场景,帮助开发者更有效地管理和优化数据加载过程。 在HIBERNATE框架中,检索策略主要涉及...
### Hibernate的检索策略详解 #### 一、概述 在Java持久化框架Hibernate中,检索策略是一种重要的机制,它主要用于控制对象何时以及如何加载到应用程序内存中。合理的检索策略不仅可以提高应用性能,还能简化代码...
检索方式及策略”这一主题中,我们将深入探讨如何在Hibernate 5中有效地检索数据以及相关的检索策略。 一、Hibernate检索方式 1. **HQL(Hibernate Query Language)**: HQL是Hibernate提供的面向对象的查询语言,...
hibernate3数据检索、抓取策略 、 注解的使用
#### Hibernate数据检索策略 Hibernate提供了不同的数据检索策略,主要包括立即检索和延迟检索: - **立即检索**:检索对象及其关联对象时,无论对象是否被使用都会立即加载,这在对象图较小或总是需要完整对象图...
3. **Hibernate Search**:作为Hibernate的一个扩展,Hibernate Search提供了基于Lucene的全文检索功能,使得在数据库中的数据可以被快速、精确地搜索。 **二、集成Hibernate Search** 1. **配置依赖**:首先,你...
而在Java持久化框架Hibernate中,这些数据类型需要与数据库中的字段类型进行映射,以便正确地存储和检索数据。这篇博客主要探讨了Java数据类型如何与Hibernate的类型映射进行对应。 首先,Java的基本数据类型在...
【Hibernate检索策略】 Hibernate提供三种主要的检索策略:立即检索、延迟检索和迫切左外连接检索。 1. **立即检索**:这种策略将立即加载关联的对象,无论对象是持久化状态还是游离状态。优点是应用程序可以方便...
在Hibernate中,数据检索主要通过Criteria、HQL(Hibernate Query Language)和原生SQL三种方式进行。本教程主要关注的是Criteria API和别名查询,它们提供了更加灵活和面向对象的检索方式。 Criteria API是...
#### 三、数据检索 Hibernate提供了多种方式来查询数据,包括HQL、QBC和本地SQL。 - **HQL (Hibernate Query Language)**:一种面向对象的查询语言,类似于SQL但更加面向对象。 - **QBC (Query By Criteria)**:...
### Hibernate的延迟检索在轻量级J2EE框架中的应用 #### 1. 引言 随着互联网技术的发展,Web应用程序的需求日益增加,对于高效、快速的开发模式也提出了更高的要求。轻量级J2EE框架(Struts+Spring+Hibernate)因...
其中,数据访问策略是Spring的重要组成部分,它为开发者提供了多种处理数据存储和检索的方法。本文将深入探讨Spring的数据访问策略,包括其核心概念、工作原理以及实际应用。 一、JDBC模板与数据访问 在早期的...
- **Hibernate数据检索策略**:立即加载、延迟加载。 - **对象之间的关联关系** - **一对一**:通过外键或者双向关联的方式实现。 - **一对多、多对一**:通过集合属性来表示多对一的关系。 - **多对多关联**...
### Hibernate知识点总结 #### 一、Hibernate概述 ...通过以上内容,我们了解了Hibernate的基本概念、配置步骤、核心类以及查询语言和检索策略等内容,这对于高效地使用Hibernate框架是非常有帮助的。
《J2EE Hibernate-6.ppt》探讨了Hibernate在J2EE环境中的检索策略,主要涉及立即检索策略、延迟检索策略以及迫切左外连接检索策略。 1. **立即检索策略**: 立即检索策略是Hibernate默认的检索方式。在处理一对多...
Hibernate Search是Hibernate ORM框架的一个扩展,它提供了对数据库中的对象进行全文检索的能力,使得我们可以高效地在大量数据中找到我们需要的信息。本例子将深入探讨如何使用Hibernate Search来实现这一功能。 #...
- **Hibernate中的n+1查询问题**:当使用默认的立即检索策略时,Hibernate会在检索一个对象的同时检索其关联的所有对象。例如,在一个`Customer`与多个`Order`的关联关系中,如果数据库中有`n`个客户,则Hibernate将...