`

Hibernate中配置属性fetch=select 和 fetch=join 区别

阅读更多
fetch参数指定了关联对象抓取的方式是select查询还是join查询,select方式时先查询返回要查询的主体对象(列表),再根据关联外键id,每一个对象发一个select查询,获取关联的对象,形成n+1次查询;
而join方式,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。
如果你的关联对象是延迟加载的,它当然不会去查询关联对象。
另外,在hql查询中配置文件中设置的join方式是不起作用的(而在所有其他查询方式如get、criteria或再关联获取等等都是有效的),会使用select方式,除非你在hql中指定join fetch某个关联对象。
分享到:
评论

相关推荐

    HIBERNATE检索策略

    描述:本文深入解析了HIBERNATE的检索策略,为读者提供了一条清晰的学习路径,重点分析了HIBERNATE中的抓取策略及其应用场景,帮助开发者更有效地管理和优化数据加载过程。 在HIBERNATE框架中,检索策略主要涉及...

    Hibernate笔记

    6. **Fetch Types**: 在Hibernate中,提供了多种方式来获取关联对象:`EAGER`(急切加载)和`LAZY`(惰性加载)。 #### 三、获取数据方法 - **load()**: 用于加载指定主键对应的实体对象。如果对象不在缓存中,则...

    j2ee英文面试

    f) 连接池配置:通过修改hibernate-cfg.xml文件中的几行代码即可实现连接池管理,例如Hibernate内置的c3p0连接池配置。 然而,Hibernate也有一些缺点,例如: - 在处理查询方面比直接使用SQL查询要慢。 - 在配置...

    Hibernate延迟加载以及利用Spring

    1. **修改Fetch策略**:将Fetch策略设置为`fetch="join"`,即在查询主对象的同时通过JOIN查询的方式加载关联对象,这样就不会抛出延迟加载异常。 2. **禁用延迟加载**:将`lazy="false"`,这样就会在查询主对象时...

    详解Hibernate一对一映射配置

    - `fetch`属性用于指定加载策略,`join`表示在查询时一起加载,`select`表示延迟加载。 - `property-ref`属性用于指定关联对象的属性名称。 - `access`属性定义了访问策略,可以是字段或属性访问。 - `formula`属性...

    Hibernate+中文文档

    3.4. Hibernate JDBC和连接(connection)属性 3.5. Hibernate缓存属性 3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA ...

    hibernate 中HQL语句查询学习笔记

    ### Hibernate中HQL语句查询学习笔记 #### HQL基础 **HQL**(Hibernate Query Language)是Hibernate框架推荐使用的查询语言,它提供了一种面向对象的方式来查询数据库,支持多种复杂的查询操作,如继承、多态及...

    Hibernate HQL.doc

    然而,类名和属性名的大小写是敏感的,例如"org.hibernate.eg.FOO"并不等于"org.hibernate.eg.Foo",同样"foo.barSet"也不等于"foo.BARSET"。在本手册中,HQL的关键字通常使用小写字母,以提高可读性。 2. `from`...

    hibernate_many2one

    为了避免这种情况,可以考虑使用`fetch="join"`或`fetch="select"`策略,前者会在加载实体时同时加载其所有关联实体,后者则按需加载。 #### 6. 映射策略 除了基本的`<many-to-one>`映射外,Hibernate还支持多种...

    hibernate 框架的基础四

    **HQL (Hibernate Query Language)** 是一种面向对象的查询语言,它允许开发人员使用类名和属性名来执行数据库查询,而不需要直接编写SQL语句。在进行多表检索时,HQL提供了多种连接方式,包括内连接、外连接等。 #...

    hibernate3.2中文文档(chm格式)

    3.4. Hibernate JDBC和连接(connection)属性 3.5. Hibernate缓存属性 3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA ...

    Hibernate问题解决

    - **解决方法:** 在Hibernate中,可以通过HQL或者Criteria API来实现`LEFT JOIN`和`RIGHT JOIN`。 - **LEFT JOIN:** ```java String hql = "FROM UserInfo u LEFT JOIN FETCH u.role r WHERE r.description ...

    Hibernate 1+N问题详解

    在Hibernate中,通常使用`ManyToOne`和`OneToMany`来表示这种关系。 根据题目中的描述,“Hibernate的两个类设置了manyToOne之后,在查询的时候,由于N对1的一方默认的fetch=FetchType.EAGER,所以会把被关联的对象...

    HQL Hibernate查询语言

    因此,SeLeCT 和 sELEct 以及 SELECT 是相同的,但是 org.hibernate.eg.FOO 不等价于 org.hibernate.eg.Foo,同样,foo.barSet也不等价于 foo.BARSET。本手册中的 HQL 关键字将使用小写字母。 2. from 子句 HQL 中...

    Hibernate中文详细学习文档

    1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 ...

    hibernate延迟加载技术详细解

    - 可以通过配置 `hibernate.default_batch_fetch_size` 参数来调整默认的批量加载大小。 2. **使用示例**: - 例如,假设有一个用户实体 User 和一个权限集合 Permissions,当尝试访问 User 对象中的 Permissions...

    hibernate的hql语句

    1. **大小写敏感性**:HQL对Java类和属性名称是大小写敏感的,但关键字和别名在大多数情况下不区分大小写。推荐使用小写字母表示HQL关键字,以提高可读性,而在Java代码中,考虑到美观性,可能会避免全大写。 2. **...

    Hibernate_HQL大全

    2. **大小写敏感性**:HQL对Java类名和属性名是大小写敏感的,但对于HQL关键字和SQL关键字,则通常不区分大小写。 3. **FROM子句**:HQL的`FROM`子句用于指定查询的目标实体。例如,“FROM Cat”将返回所有Cat类的...

    hibernate的n+1问题.docx

    此外,我们还可以在实体映射文件中通过`lazy="true"`或`fetch="join"`等属性来设定默认的检索策略。但需要注意,过度使用迫切加载可能导致大数据量的内存消耗,因此应结合具体业务场景选择合适的检索策略。 总结,...

    Hibernate延迟加载

    2. **集合**:在一对多或集合关联中,可以使用`<set>`或`<list>`元素的`lazy`和`fetch`属性来控制延迟加载行为。如: ```xml <set name="tblJds" inverse="true" lazy="true"> ``` 或者: ```xml <set name=...

Global site tag (gtag.js) - Google Analytics