`
wanghaoran04141205
  • 浏览: 79294 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate lazy fetch

阅读更多

http://www.360doc.com/content/070417/10/11192_451731.html

http://www.cn-java.com/www1/?uid-565002-action-viewspace-itemid-54374

 

<many-to-one name="departmentInfo" class="com.plane.beans.DepartmentInfo" lazy="false" fetch="select">

延迟加载

比如查询一张表时,有外键对应另一张表
可以使用延迟加载
这样就不会把外键对应表的数据加载

=======================================

lazy是延迟加载,默认是延迟加载。
主要是为了系统的性能,当一张表引用到另外一张表时,如果不是立即需要另外一张表的内容,就可以采取延迟加载,直到要用到时才加载另外一张表。

===========================================

lazy是延迟加载,默认是延迟加载。 延迟加载的作用就是增加系统的性能度,得到你想要的数据,你不想要的数据不会给你查出来

================================================

其实手动延迟加载比较好,又提高了系统的性能,想要的时候就加载,不要就不用具体如下:在取数据的时候代码中写一段就行:
Hibernate.initialize(s.getGradeclass());就行,就代表对象s中加载gradeclass这张表的数据!

================================================
fetch 和 lazy 主要是用来级联查询的,
而 cascade 和 inverse 主要是用来级联插入和修改的      
   fetch参数指定了关联对象抓取的方式是select查询还是join查询,
select方式时先查询返回要查询的主体对象(列表),再根据关联外键 id,
每一个对象发一个select查询,获取关联的对象,形成n+1次查 询;
而join方式,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。
如果你的关联对象是延迟加载的,它当然不会去查询关联对象。 另外,在hql查询中配置文件中设置的join方式是不起作用的(而在所有其他查询方式如get、criteria或再关联获取等等都是有效的),会使用 select方式,除非你在hql中指定join fetch某个关联对象。fetch策略用于定义 get/load一个对象时,如何获取非lazy的对象/集合。 这些参数在Query中无效。
========================================================
   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某个关联对象。

分享到:
评论

相关推荐

    Hibernate Fetch 的作用

    在Hibernate中,主要有两种Fetch策略:Eager(急切)和Lazy(懒惰)。默认情况下,Hibernate使用Lazy策略,这意味着关联对象不会立即加载,除非显式访问它们。这有助于提高应用程序的性能,因为不必要的数据不会被...

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

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

    Hibernate lazy加载FOR Connection

    此外,理解Hibernate的“fetch plan”也很重要,这是控制加载关联对象策略的一种方式。FetchType.LAZY和FetchType.EAGER是两种主要的加载策略,前者对应懒加载,后者则是在加载主对象时同时加载关联对象。 总之,...

    Hibernate lazy延迟加载

    **标题**: Hibernate懒加载(Lazy Loading) 在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的优化策略,它的核心思想是“延迟加载”或“按需加载”。默认情况下,当一个实体被加载时,并不会...

    hibernate 中的lazy属性祥解.txt

    在Hibernate中,当设置关联属性的`fetch`或`lazy`属性为`true`时,表示该关联属性采用懒加载方式。这意味着,在获取主对象时,Hibernate不会立即加载与其关联的子对象。例如,在用户(User)与帖子(Post)之间的多...

    hibernate的lazy策略forClass

    在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的对象关系映射策略,用于提高应用程序的性能。懒加载的基本思想是延迟加载,即当真正需要数据时,才去数据库加载。在这个场景中,我们关注的是...

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

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

    hibernate在集合上的lazy策略

    在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种优化策略,它允许我们推迟对关联对象的加载,直到真正需要它们的时候。标题“hibernate在集合上的lazy策略”指的是Hibernate如何处理与实体相关的集合...

    hibernate源码下载

    在Hibernate中,Fetch策略包括EAGER(即时加载)和LAZY(延迟加载)。EAGER策略会立即加载关联的对象,而LAZY策略则会在需要时才进行加载,以优化性能。例如,`hibernate_fetch_5`可能涉及了多对一、一对多、一对一...

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

    当`@ManyToOne`, `@OneToOne`, `@OneToMany`, 或 `@ManyToMany`注解中的`fetch`属性设置为`LAZY`时,关联的实体将不会在主实体加载时立即加载,而是在第一次访问这些关联属性时才加载。 - 这种策略避免了在不需要...

    hibernate

    根据提供的文件信息,我们可以深入探讨Hibernate框架中的几个关键概念,特别是`fetch`, `lazy`, `cascade`, 和 `inverse`关键字的使用与理解。这四个概念在处理对象关系映射(ORM)时非常重要,尤其是在Java环境下...

    Hibernate教程15_关联关系中的CRUD Cascade_Fetch

    默认情况下,Hibernate使用懒加载(Lazy Fetch),只有在实际访问关联属性时才会加载。立即加载(Eager Fetch)则会在查询主实体时一并加载关联实体。`@ManyToOne(fetch = FetchType.EAGER)`表示多对一关系的加载...

    Hibernate 经典例子全

    在`hibernate_fetch_1`示例中,我们了解到Hibernate的加载策略,包括Eager Fetching(即时加载)和Lazy Fetching(延迟加载)。即时加载会在查询时一起加载关联的对象,而延迟加载则只在真正需要时才执行数据库查询...

    hibernate在单端关联上的lazy策略

    1. **配置懒加载**:在Hibernate的映射文件或注解中,可以通过`fetch="lazy"`(XML映射)或`@OneToMany(mappedBy = "property", fetch = FetchType.LAZY)`(注解映射)来指定关联的懒加载。 2. **代理机制**:...

    hibernate aip hibernate aip

    7. **性能优化**:包括延迟加载(Lazy Loading)、批处理(Batch Processing)、缓存策略调整等,这些都可以提升Hibernate应用的性能。 8. **查询优化**:避免N+1查询问题,使用JOIN fetch提前加载关联数据,使用...

    优化Hibernate性能的几点建议

    在使用Hibernate进行数据查询时,Fetch Size的设置对性能有着显著的影响。Fetch Size是指每次从数据库中取出的数据行数,默认情况下,Oracle数据库的JDBC驱动程序中的Fetch Size被设置为15。然而,将Fetch Size增加...

    hibernate源码

    文件`hibernate_fetch_1`与`hibernate_query_cache`涉及到的是Hibernate的数据检索和查询缓存。Hibernate提供了多种加载策略,包括立即加载(Eager Fetching)和延迟加载(Lazy Loading)。立即加载会一次性获取...

    Hibernate-基础联表模板

    综上所述,"Hibernate-基础联表模板"涵盖了Hibernate中关于联表查询的基础知识,包括各种查询方式、关联关系的定义、Fetch策略以及查询结果的处理等,是开发者进行数据库操作的有力助手。通过这个模板,开发者可以...

    hibernate学习资料

    5. **hibernate_lazy_for_collection**:懒加载是Hibernate的一种优化策略,它延迟加载关联的集合,直到真正需要时才从数据库中获取。这部分可能详细介绍了如何配置和使用懒加载,以及其优缺点。 6. **hibernate_...

    HibernateDemo(hibernate基本用法演示)

    9. **延迟加载(Lazy Loading)**:通过 `@OneToMany(mappedBy = "..." fetch = FetchType.LAZY)` 可以实现懒加载,只有在真正需要时才会加载关联的对象,避免了数据冗余。 10. **事件监听**:可以注册事件监听器,...

Global site tag (gtag.js) - Google Analytics