在一对多的情况下。Class和Student为 one-to-many 映射关系
在class班级对象中,存在如下映射
<set
name="students"
cascade="all-delete-orphan"
inverse="true"
lazy=”true”
outer-join="true"
>
<key column="classid" />
<one-to-many class="cn.tutorinfo.domain.Student" />
</set>
无论 lazy设置为true还是 false 只要设置了outer-join 为true ,将采用左外连接检索策略检索class关联的 student对象,发送如下SQL语句:
select
classinfo0_.id as id0_1_,
classinfo0_.class_name as class2_0_1_,
classinfo0_.info as info0_1_,
students1_.classid as classid3_,
students1_.id as id3_,
students1_.id as id1_0_,
students1_.name as name1_0_,
students1_.age as age1_0_,
students1_.classid as classid1_0_
from
testdb.class_info classinfo0_
left outer join
testdb.student students1_
on classinfo0_.id=students1_.classid
where
classinfo0_.id=?
如果outer-join 不设置 (默认就是不设置),只设置lazy属性,则按照lazy属性的设置进行,lazy默认是false延迟加载,如果设置为true 则立即检索全部相关的student对象
Lazy属性
|
Outer-join属性
|
检索策略
|
True (默认)
|
False
|
延迟检索
|
False
|
False
|
立即检索
|
True
|
True
|
迫切左外连接
|
False
|
Ture
|
迫切左外连接
|
Hibernate3 的<set >一对多映射中 默认lazy=true , outer-join=false.即 默认采用延迟检索机制
在多对一映射关系中,比如student对象中有如下的映射:
<many-to-one name="classInfo"
class="cn.tutorinfo.domain.ClassInfo"
cascade="save-update"
>
<column name="classid" />
</many-to-one>
一个student只属于一个班级,一个班级有多个student.
在hibernate3中,针对关联对象,默认的检索机制就是延迟检索.
Many-to-one 映射中,同样可以设置outer-join属性,对于关联的class对象,采用如下检索方式
Student.hbm.xml中<many-to-one>元素的outer-join属性
|
ClassInfo.hbm.xml的<class>类级别的lazy属性
|
检索Student对象时对关联的classInfo对象使用的策略
|
Auto (默认值)
|
True (默认)
|
延迟检索
|
Auto (默认值)
|
False
|
迫切左外连接
|
True
|
True
|
迫切左外连接
|
True
|
False
|
迫切左外连接
|
False
|
True(默认)
|
延迟检索
|
False
|
False
|
立即检索
|
总结:
对于多对以或者一对一 这样的关联,应该优先考虑使用外连接检索策略,即将outer-join设置为true。一般我们在获取对象时候,在大多数的业务逻辑情况下,同时也会获取关联的数据(外键所表示的值没有实际意义,比如实际中,获取学生信息时,我们希望立即获取他的班级信息,但当前只获取了学生所在的班级编号,但并不知道班级名,所以我们可以使用做外连接同时获取,这样比立即检索少用了sql语句)。
当然,如果仅仅是获取学生的用户信息,不需要立即获取所在的班级信息,可以考虑使用延迟加载的策略。即默认的策略就是如此。
另外,hql中指定的检索策略,会忽略配置文件中相关的检索策略
分享到:
相关推荐
描述:本文深入解析了HIBERNATE的检索策略,为读者提供了一条清晰的学习路径,重点分析了HIBERNATE中的抓取策略及其应用场景,帮助开发者更有效地管理和优化数据加载过程。 在HIBERNATE框架中,检索策略主要涉及...
关联级别检索策略是指当加载实体之间的一对多或多对多关联时,如何处理这些关联关系的加载。关联级别的检索策略主要关注于实体之间的关系加载,如一对多、多对多等。 ##### 1. Join Fetch(联合加载) - **定义**:...
常见的关联映射包括一对一、一对多、多对一和多对多等。 ##### 一对多关联映射 一对多关联通常通过 `@OneToMany` 和 `@ManyToOne` 注解来实现。 - **@OneToMany**:用于配置父实体与子实体之间的一对多关系。 - *...
Hibernate提供了多种映射策略,如一对一、一对多、多对一和多对多映射,书中深入讲解了这些映射策略的使用方法和最佳实践。同时,还介绍了如何处理实体之间的复杂关系,如级联保存、级联删除等。 #### 5. 查询语言...
4. **对象关系映射(ORM)**:Hibernate支持多种映射方式,如一对一、一对多、多对一和多对多关系。这些关系通过使用`@OneToOne`, `@OneToMany`, `@ManyToOne`, 和 `@ManyToMany` 注解来定义。 5. **主键生成策略**...
在映射文件(.hbm.xml)中,开发者定义了实体类与数据库表之间的映射关系,包括字段与列的对应、主键生成策略、关联关系(一对一、一对多、多对一、多对多)等。此外,还可以通过注解方式进行映射,将这些信息直接...
在Hibernate中,Set接口的实现类如HashSet和TreeSet通常用于一对多或多对多的关系映射。例如,一个用户可以有多个订单,订单也可以属于多个用户,这就形成了双向多对多关系。在映射文件中,我们通常使用`<set>`标签...
10. **一对一(OneToOne)、一对多(OneToMany)、多对多(ManyToMany)关系映射**:Hibernate提供了多种关联映射方式,帮助处理复杂的数据关系。 11. **继承映射**:Hibernate支持单表继承、联合继承和表-per-...
**标题:“Hibernate一对多单向关联映射”** 在Java Web开发中,关系数据库与对象模型之间的转换是一个重要环节,Hibernate作为一款强大的ORM(Object-Relational Mapping)框架,简化了这一过程。本文将深入探讨...
这包括了主键生成策略、属性类型映射、关联关系(一对一、一对多、多对一、多对多)的配置,以及懒加载(Lazy Loading)和级联操作(Cascading)等高级特性。 在事务处理部分,手册会阐述Hibernate的事务管理机制,...
除此之外,文档可能还会涉及二级缓存、懒加载、多态性、关联映射(一对一、一对多、多对一、多对多)以及集合映射等高级主题。这些特性使Hibernate在处理复杂的数据结构和性能优化时表现出色。 总之,《Hibernate3...
9. **Cascading和Associations**:描述了对象之间的关联关系(一对一、一对多、多对多),以及如何配置级联操作,如级联保存、删除。 10. **Lazy Loading和Eager Loading**:懒加载和急加载是对象加载策略,决定了...
集合类型的延迟加载是在多对一或多对多关联中特别重要的优化手段。通常情况下,关联的集合默认会在主对象加载时一起加载,这可能导致不必要的数据加载和内存占用。通过在映射文件中设置`lazy="true"`,可以实现集合...
在使用Hibernate进行数据库操作时,可能会遇到MySQL数据库中文排序不正确的问题。这通常是由于字符集设置、数据库...通过以上步骤,可以有效地解决MySQL数据库在Hibernate中的中文排序问题,确保数据的正确展示和检索。
Hibernate3支持一对一、一对多、多对一和多对多等多种关联映射。这些关联可以在实体类之间建立,通过配置文件或注解来定义。 八、性能优化 为了提升性能,Hibernate3支持延迟加载(Lazy Loading)、批处理(Batch ...
Hibernate 提供了多种不同的映射策略来处理一对多和多对多关系: - **表关联**:通过额外的关联表来维护关系。 - **外键关联**:在子表中添加一个外键来指向父表的主键。 - **联合映射**:适用于具有多个表继承层次...
2. **懒加载**:对于一对多、多对多关联关系,可以通过懒加载只在需要时才加载关联对象,避免一次性加载大量数据。 3. **批处理**:批量插入、更新或删除操作可以显著提高效率。 4. **预编译SQL**:使用HQL或...
通过配置文件中的映射注解(如`@OneToMany`、`@ManyToOne`、`@ManyToMany`等)来建立类之间的关系,如一对多、多对多等。 **Hibernate缓存机制** - 一级缓存是内部缓存,事务级,每个Session都有自己的缓存。 - 二...
9. **集合映射(Collection Mapping)**:Hibernate可以映射Java集合类型到数据库的关联关系,如List、Set、Map等,方便处理一对多、多对一、多对多的关系。 10. **Callback事件**:Hibernate提供了一些生命周期回...