`
- 浏览:
55643 次
- 性别:
- 来自:
上海
-
Hibernate中的fetch, lazy, inverse和cascade
[color=cyan] fetch 和 lazy 主要是用来级联查询的, 而 cascade 和 inverse 主要是用来级联插入和修改的
inverse 属性默认是false的,表示由己方来维护关系。cascade="all" 时候能级联操作(all指定了操作的程度),而none的时候只是维持两者之间的关系(如果inverse="false")
在一对多映射中,一的一方要设<set inverse="true" casecade="save-update" />,多的一方要设<many-to-one inverse=false />
inverse=true作用: 这里关系是由儿子维护的,所以如果只是往父亲里加入儿子,不给儿子设置父亲的话session.save(parent),就不会保存儿子!
因为父亲有个孩子的集合,他无法知道哪个孩子的父亲id已经指向自己了,所以对于每一个孩子,都要更新父亲使他只想自己,而这个关系由孩子维护就好多了,每个孩子只有一个父亲,只有设置过的才需要更新,所以显然,这个父子关系由孩子来维护比较省力.减轻了数据库的负担
fetch参数指定了关联对象抓取的方式是select查询还是join查询,select方式时先查询返回要查询的主体对象(列表),再根据关联外键id,每一个对象发一个select查询,获取关联的对象,形成n+1次查询;而join方式,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。如果同时fetch="join" lazy="true"经过测试发现fetch有效。另外,在hql查询中配置文件中设置的join方式某些情况下是不起作用的(而在所有其他查询方式如get、criteria或再关联获取等等都是有效的),会使用select方式,除非你在hql中指定join fetch某个关联对象。 [/color]
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
通过上述内容,我们了解了Hibernate中`fetch`, `lazy`, `cascade`, 和 `inverse`的关键概念及其应用场景。这些概念对于高效管理对象之间的关系至关重要,特别是在大型项目中。正确地理解和运用这些特性能够帮助开发...
在Hibernate中,双向一对多关系意味着两个实体类之间存在一对多的关系,并且双方都能感知到这种关系。例如,一个班级(Class)可以包含多个学生(Student),同时一个学生也属于一个班级。在这种关系中,Class是多的...
- **一对多**:在映射文件中,通过 `<set>` 标签定义一对多关系,并可通过 `inverse`、`cascade`、`lazy` 和 `fetch` 控制行为。 - **多对一**:通过 `<many-to-one>` 标签定义,可设置 `fetch` 和 `cascade` 属性。...
6. **Fetch Types**: 在Hibernate中,提供了多种方式来获取关联对象:`EAGER`(急切加载)和`LAZY`(惰性加载)。 #### 三、获取数据方法 - **load()**: 用于加载指定主键对应的实体对象。如果对象不在缓存中,则...
4. **fetch策略**:通过`fetch`属性可以指定加载关联的方式,如`FetchType.LAZY`(懒加载)和`FetchType.EAGER`(立即加载)。默认情况下,一对多关系是懒加载的,以避免不必要的性能开销。 5. **级联操作**:通过`...
这通过 `cascade` 参数在 `@OneToMany` 和 `@ManyToOne` 注解中配置。 7. **懒加载与立即加载 (Lazy Loading vs Eager Loading)** Hibernate 提供了两种加载策略:懒加载(默认)只在需要时加载关联数据,而立即...
为了更好地理解和运用Hibernate中的关联映射机制,我们需要深入了解其常用的属性及其作用。 ##### 1. `<class>`元素 - **`name`**:指定类的完整包名,如`com.example.Person`。 - **`table`**:对应数据库中的...
在Hibernate中,可以通过@OneToOne注解来定义,可以是外键约束或主键共享,需要配置fetch属性来决定何时加载关联对象,比如LAZY或EAGER。 2. **一对多关联(OneToMany)**:一个实体可以与多个其他实体关联。这通常...
本篇主要讨论的是Hibernate中的一对多关系映射,以及如何在实际操作中进行配置和使用。 一对多关系指的是一个实体可以与多个其他实体相关联。例如,在用户系统中,一个用户可以有多个订单,这就是典型的一对多关系...
- **懒加载与瞬时加载**:可以通过`lazy="true"`(默认)或`fetch="LAZY"`(注解中为`@OneToMany(fetch = FetchType.LAZY)`)实现懒加载,以提高性能,避免一次性加载大量数据。 - **级联操作**:通过`cascade`属性...
在多对多映射中,这两个标签用于定义关系的一端,它们包含属性如inverse(反向),cascade(级联操作),fetch(加载策略)等。 4. **中间表与关联表**: 在多对多关系中,通常需要一个中间表来存储两个实体的主键,...
6. **fetch**:这个属性用于控制集合的加载策略,如"EAGER"(立即加载)和"LAZY"(延迟加载)。默认情况下,Hibernate采用懒加载,只在真正需要集合时才去数据库获取数据,以提高性能。 在`s2sh_relation13_...
本篇将详细探讨Hibernate中的映射关系,主要包括实体之间的一对一、一对多、多对一和多对多四种关系映射。 1. **一对一映射(One-to-One)** 在一对一映射中,两个实体之间存在唯一的关联。这可以通过`@OneToOne`...
以上内容总结了Hibernate使用过程中的一些重要技巧和注意事项,包括配置文件的选择与使用、实体关系管理、延迟加载策略以及与Spring框架的集成等关键知识点。通过掌握这些技巧,开发者可以更高效地利用Hibernate框架...
在Java的持久化框架Hibernate中,一对多(Many-to-One)和多对一(One-to-Many)的关系映射是数据库关系模型中的常见关联类型。本文将深入探讨这两种关联方式在使用Hibernate时的配置,包括基于注解(Annotation)和...
本篇将深入探讨Hibernate中的一对多映射配置和实现。 **一、一对多关系概述** 在数据库设计中,一对多关系意味着一个表(类)中的记录(对象)可以与另一个表(类)中的多个记录(对象)相对应。例如,一个学生可以...
在Java持久化框架Hibernate中,一对多映射是常见的实体关系映射类型,它表示一个实体(例如User)可以与多个其他实体(例如Account)相关联。以下是对Hibernate一对多映射配置的详解: 一、XML文件配置 1. 单向...
总之,理解并正确实现Hibernate中的一对多双向关联映射是提升应用程序性能和数据一致性的重要步骤。通过细心配置映射文件,编写相应的实体类,以及妥善处理关联关系的维护,我们可以有效地管理复杂的数据结构。
在Hibernate中,我们通过在实体类和映射文件中设置注解或XML配置来实现这种关系。 **配置关联** 在Java类中,我们通常使用`@OneToMany`注解来标识一对多关系。此注解包含几个关键属性,如`targetEntity`指定关联的...
在Hibernate中,一对多关系通常用在父类(拥有端)和子类(被拥有端)之间。例如,一个用户可以有多个订单,而每个订单只能属于一个用户。配置一对多关系,你需要在子类(订单)的映射文件或注解中定义一个外键,...