`
jaychang
  • 浏览: 731510 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

fetch 和 lazy 配置用于数据的查询

 
阅读更多
fetch 和 lazy 配置用于数据的查询 

lazy 参数值常见有 false 和 true,Hibernate3 映射文件中默认lazy = true ; 

fetch 指定了关联对象抓取的方式,参数值常见是select和join,默认是select, select方式先查询主对象,再根据关联外键,每一个对象发一个select查询,获取关联的对象,形成了n+1次查询;而join方式,是left outer join查询,主对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。 

在映射文件中,不同的组合会使用不同的查询: 
1、lazy="true" fetch = "select" ,使用延迟策略,开始只查询出主对象,关联对象不会查询,只有当用到的时候才会发出sql语句去查询 ; 

2、lazy="false" fetch = "select" ,没有用延迟策略,同时查询出主对象和关联对象,产生1+n条sql. 

3、lazy="true"或lazy="false" fetch = "join",延迟都不会作用,因为采用的是外连接查询,同时把主对象和关联对象都查询出来了. 

另外,在hql查询中,配置文件中设置的join方式是不起作用的,而在其他查询方式如get、criteria等是有效的,使用 select方式;除非在hql中指定join fetch某个关联对象。fetch策略用于get/load一个对象时,如何获取非lazy的对象/集合。 这些参数在Query中无效。 

配置还是缺乏灵活性的,开发中常会有不同的需求,所以在配置中选择默认值,在具体业务中来指定策略。再者对数据库的操作都是使用SQL来执行的,掌握了sql执行性能反过来看这些配置也许很容易了。 

我对Hibernate、SQL也都只是了解水平,还需进一步深入学习,以上只是个人的看法。
通俗点说:
hibernate 配置文件的lazy 和 fetch 

lazy :配置属性是否查询要延迟加载?参数true/false 默认为true 目的是优化hibernate性能 

hibernate是数据库表 映射成 javaPOJO对象 在数据库表为主外键关系时,也就是 1:N 关系 在双向关联的时候 1的对象里面有个set集合存放所有符合1对象外键的N对象 在查询1的一方会同时返回一个N一方set列表 如果是true则推迟加载(在真正访问到set列表里的对象时 才去加载)false则是一次性都加载进来 如果数据量很多会导致session缓存(hibernate一级缓存)过大而导致内存溢出 所以需要进行懒加载设置。 


fetch :是配置hibernate的在查询时的抓取方式 参数select/join 

select:是不级联查询,不查外键表 N+1次查询方式 
join:是级联查询 一条SQL查询返回主外键两张表
分享到:
评论

相关推荐

    SSH笔记-检索策略(lazy、fetch、batch-size)

    本笔记将聚焦于Hibernate中的类级别检索策略以及`lazy`、`fetch`和`batch-size`这三个属性的使用,帮助开发者更高效地管理数据库查询。 1. **懒加载(Lazy Loading)** `lazy`属性是Hibernate的懒加载机制,用于...

    hibernate 中 fetch=FetchType.LAZY 懒加载失败处理方法

    hibernate 中 fetch=FetchType.LAZY 懒加载失败处理方法 Hibernate 中 fetch=FetchType.LAZY 懒加载失败处理方法是 Hibernate 框架中的一种常见问题。当我们在 Hibernate 中使用懒加载特性时,可能会遇到 ...

    hibernate 中的lazy属性祥解.txt

    `lazy`属性是Hibernate中用于控制数据加载策略的一个关键参数,主要用于延迟加载关联对象。当一个对象被加载时,与其关联的对象不一定立即加载到内存中,而是等到真正需要使用时才加载,这就是懒加载(Lazy Loading...

    当设置lazy=true时,怎样使用extjs和Hibernate

    - 在ExtJS前端,定义数据模型(Model)和数据存储(Store),并配置适当的远程加载(remoteLoad)和关联配置(associations)。 - 使用ExtJS的事件监听,如`load`事件或自定义事件,来决定何时触发获取关联数据的...

    hibernate代码优化基于配置的多表查询

    通过设置`fetch="lazy"`,我们可以实现延迟加载,只有在真正需要关联数据时才发起查询。 6. **批处理**: 批量操作可以显著提高效率。例如,使用`Session.flush()`和`Session.clear()`控制事务边界,或配置`...

    hibernate在单端关联上的lazy策略

    标题中的“hibernate在单端关联上的lazy策略”指的是Hibernate框架中的一种对象关系映射(ORM)技术,用于优化数据加载效率。在Hibernate中,懒加载(Lazy Loading)是一种延迟加载策略,它允许我们在需要时才加载...

    hibernate的lazy策略forClass

    在压缩包文件`hibernate_lazy_for_class`中,可能包含了相关的代码示例、配置文件或日志文件,用于更深入地学习和分析Hibernate的懒加载策略在实际项目中的应用。通过阅读和分析这些资源,开发者可以更好地理解和...

    React-redialReact的通用数据获取和路由生命周期管理

    - **可复用的fetch逻辑**:你可以创建可复用的fetch配置,用于多个组件或路由,减少了代码重复。 总的来说,React-redial是React应用开发中一个强大的工具,它提高了数据获取和路由管理的效率,让开发者能专注于...

    Hibernate lazy加载FOR Connection

    通常,这样的文章可能会详细解释懒加载的概念,如何在Hibernate中配置和使用,以及它在实际开发中的应用和注意事项。 标签“源码”表明这个话题可能涉及到Hibernate框架的内部实现,包括其源代码分析,这可能涉及到...

    动态加载bootstrap表格数据

    10. **自定义扩展**:如果你需要更复杂的功能,如过滤、排序或编辑表格数据,可以考虑使用Bootstrap的扩展库,如Datatables或Handsontable,它们提供了丰富的API和配置选项。 综上所述,动态加载Bootstrap表格数据...

    数据库更新前台页面不更新问题

    通过使用 flush() 方法和正确地配置 lazy 属性,我们可以确保数据库更新后,前台页面能够正确地更新。 在我们的应用程序中,我们使用的是 Struts2+Hibernate 框架,结合 DAO 设计模式和 Mysql 数据库。为了确保...

    Hibernate_关联关系映射配置

    配置时需要指定关联的字段或属性,以及可选的`fetch`策略(默认为懒加载)和`cascade`策略(用于控制级联操作)。 二、一对多(One-to-Many) 一个实体可能与多个其他实体相关联,例如一个班级有多个学生。这种...

    hibernate映射的注解配置

    `fetch`属性定义了数据获取策略,可以选择`EAGER`(即时加载)或`LAZY`(延迟加载)。`optional`参数表示字段是否允许为空,默认为`true`。 6. **@Column**:用于详细定义数据库表中的字段,包括字段名、是否允许为...

    框架笔试-tang.docx

    * Model:用于表示业务逻辑和数据 * View:用于表示用户界面 * Controller:用于处理用户输入和业务逻辑 20. hibernate 的框架解析? Hibernate 是一个基于 jdbc 的对象关系映射(ORM)框架,包括: * 映射文件:...

    Hibernate各种数据库关联annotatian和XML的配置集锦

    - 选择合适的映射策略:对于频繁查询的一对多关系,可以考虑使用集合的延迟加载(fetch=FetchType.LAZY);对于多对一关系,如果总是成对出现,可以考虑使用联合主键或单向关联。 - 使用二级缓存:通过配置...

    实用JPA开发指南----jpa核心技术(关联关系等的配置高级配置)

    6. **查询语言(Query Language)**: JPA提供了JPQL(Java Persistence Query Language),类似SQL,用于检索和操作持久化数据。此外,还可以使用Criteria API进行动态查询。 通过深入理解并灵活运用这些知识点,...

    j2ee英文面试

    - fetch=lazy:这是在关联对象首次被访问时才会加载的策略。 面试中,对于这些知识点的掌握程度通常反映了应聘者对Java企业级开发的理解深度。了解这些技术的内部工作原理、优缺点以及最佳实践对于在面试中表现出色...

    JPA注解的解释和说明.pdf

    @Basic(fetch=FetchType.LAZY):此注解用于指定属性的加载策略,FetchType.LAZY表示延迟加载,即只有在真正需要时才会从数据库加载数据。 @JsonIgnore:此注解用于在进行JSON序列化时忽略指定的属性。 @JoinColumn...

    hibernate 多对一映射关联配置

    懒加载则可以通过`@ManyToOne(fetch = FetchType.LAZY)`来实现,避免在加载主实体时立即加载关联实体,从而提高性能。 在博文《hibernate 多对一映射关联配置》中,作者可能详细阐述了如何配置这些属性,以及在实际...

    ORM映射关系配置

    - `fetch`属性:决定何时加载关联数据,`FetchType.LAZY`表示延迟加载,`FetchType.EAGER`表示立即加载。 - `cascade`属性:控制级联操作,如`CascadeType.ALL`表示所有操作都级联到关联对象。 - `unique`属性:...

Global site tag (gtag.js) - Google Analytics