笔记:
<class name="Student" table="student" >
<id name="studentNO" type="int">
<generator class="native"></generator>
</id>
<property name="studentName" type="string"/>
<many-to-one name="classes" column="classNO" class="Classes" fetch="join" lazy="false"></many-to-one>
</class>
当用load方法加载Student时,会延时加载
当不设fetch=join用lazy=true时:
对于many-to-one,one-to-one,集合如component,set,map,array,list这些本身默认lazy=true的属性,不管是load还是get,表现出来的都是使用classes时才加载,看上去get在这里也是延时加载了,可见延不延时加载在此时只是针对当前对象的普通属性。但是当lazy=false时,这些属性,不管是load还是get都是都是同时发出两条sql,尽管load方法是在使用当前对象时才发出sql,而get是在一执行时就发出2条sql。
当设fetch=join时
查询student时,会同时查出classes,而且是通过一条连接查询实现,这个时候集合属性里面的lazy就没有作用了。
对于load会在使用student或classes时,发出sql,对于get会在执行进就发出sql
-
Join fetching
- Hibernate retrieves the
associated instance or collection in the same SELECT
,
using an OUTER JOIN
.用外连接检索相关的实例或集合,通过一条select语句(实了下,发现是左外连接)
-
Select fetching
- a second SELECT
is used to retrieve the associated entity or
collection. Unless you explicitly disable lazy fetching by specifying lazy="false"
, this second select will only be executed when
you actually access the association.通过第二条select语句检索相关的实体或集合,但是前提lazy=false,并且只有在访问相关数据时才会发出第二条sql
分享到:
相关推荐
Lazy与Fetch结合的场景分析 在提供的代码示例中,`Parent`类与`Child`类之间存在一对多的关系。默认情况下,当加载`Parent`实体时,其关联的`Child`实体不会立即加载,这是因为默认的Lazy策略在起作用。然而,如果...
本笔记将聚焦于Hibernate中的类级别检索策略以及`lazy`、`fetch`和`batch-size`这三个属性的使用,帮助开发者更高效地管理数据库查询。 1. **懒加载(Lazy Loading)** `lazy`属性是Hibernate的懒加载机制,用于...
hibernate 中 fetch=FetchType.LAZY 懒加载失败处理方法 Hibernate 中 fetch=FetchType.LAZY 懒加载失败处理方法是 Hibernate 框架中的一种常见问题。当我们在 Hibernate 中使用懒加载特性时,可能会遇到 ...
标题“hibernate在集合上的lazy策略”指的是Hibernate如何处理与实体相关的集合类(如List、Set等)的懒加载。这篇文章可能详细解释了Hibernate在集合懒加载方面的实现方式以及其背后的原理。 懒加载的主要目的是...
在Hibernate中,当设置关联属性的`fetch`或`lazy`属性为`true`时,表示该关联属性采用懒加载方式。这意味着,在获取主对象时,Hibernate不会立即加载与其关联的子对象。例如,在用户(User)与帖子(Post)之间的多...
1. 在实体类中,我们通常会使用`@OneToMany`, `@ManyToOne`, `@OneToOne` 或 `@ManyToMany` 注解来定义关联关系,然后通过 `fetch = FetchType.LAZY` 来指定关联关系的加载策略为懒加载。 2. 当执行查询并返回实体时...
当`@ManyToOne`, `@OneToOne`, `@OneToMany`, 或 `@ManyToMany`注解中的`fetch`属性设置为`LAZY`时,关联的实体将不会在主实体加载时立即加载,而是在第一次访问这些关联属性时才加载。 - 这种策略避免了在不需要...
`@ManyToOne(fetch = FetchType.EAGER)`表示多对一关系的加载策略为立即加载,`@OneToMany(fetch = FetchType.LAZY)`表示一对多关系的懒加载。 5. 源码分析: 压缩包中的`s2sh_relation12_one2many_many2one_bi_...
- `PDO::FETCH_OBJ`:返回一个匿名对象,其属性与列名相对应。 - `cursor_orientation` 参数(可选)用于决定从结果集中获取哪一行,如果游标是可滚动的。这可以是`PDO::FETCH_ORI_*`常量之一,默认值是`PDO::...
1. **配置懒加载**:在Hibernate的映射文件或注解中,可以通过`fetch="lazy"`(XML映射)或`@OneToMany(mappedBy = "property", fetch = FetchType.LAZY)`(注解映射)来指定关联的懒加载。 2. **代理机制**:...
当我们定义这些关系时,如果不希望在加载父对象时立即加载子对象,可以设置`fetch`属性为` FetchType.LAZY`。例如: ```java @Entity public class Parent { @Id @GeneratedValue(strategy = GenerationType....
在Hibernate中,当一个实体类与多个其他实体类通过一对多或多对多关系关联时,这种懒加载特别常见。 在实际操作中,Hibernate通过使用代理对象(Proxy)来实现懒加载。当你尝试访问一个被标记为懒加载的集合属性时...
您将学到什么使用$fetchState在客户端获取数据时显示漂亮的占位符使用keep-alive和activated钩子在已经访问过的页面上有效地缓存API请求使用this.$fetch()重用fetch钩子this.$fetch() 设置fetchOnServer值来控制何时...
文件名称列表中的 "hb_09_lazy"、"hb_10_fetch" 和 "hb_11_cache" 可能代表一系列教程或示例,分别对应于懒加载、一次性加载和缓存的实践。通过学习这些资源,你可以更好地理解和掌握如何在实际项目中运用这些策略来...
为了提供更好的用户体验,我们可以使用懒加载(lazy loading)策略。只有当图片进入视口时才开始加载。这可以通过监听滚动事件和计算元素相对于视口的位置来实现。另外,预加载(prefetching)也是一种优化方法,...
5. **选择性抓取(Lazy with Fetch)**:结合懒加载和批处理,可以使用`@OneToMany(mappedBy = ..., fetch = FetchType.LAZY, targetEntity = ..., cascade = CascadeType.ALL, fetch = FetchType.EAGER)`来指定只在...
<many-to-one name="customer" class="Customer" fetch="lazy" column="customer_id" /> ``` 综上所述,通过深入了解HQL的多表检索技术、事务管理及隔离级别、查询优化方法以及合理的抓取策略配置,可以帮助...
#### 二、FetchType.EAGER与FetchType.LAZY的区别 **1. FetchType.EAGER:** - 当使用`EAGER`加载方式时,关联的数据会在主数据查询时一同获取。 - 这种方式的好处在于可以减少后期查询数据库的需求,提高效率。 -...
根据提供的文件信息,我们可以深入探讨Hibernate框架中的几个关键概念,特别是`fetch`, `lazy`, `cascade`, 和 `inverse`关键字的使用与理解。这四个概念在处理对象关系映射(ORM)时非常重要,尤其是在Java环境下...