`

Hibernate级联关系的说明和优化

 
阅读更多
今天接到一个公司的电话面试,里面问道Hibernate的级联,很失败,竟然回答的吞吞吐吐的,失败。前几天刚刚做了,看开做东西要仔仔细细,马虎问题大。

说说级联吧:

========================INVERSE===============================

Hibernate里面的inverse 有两个值 true ,false  ;

inverse的意思是翻转,这里面理解为对对应表的的维护

http://space.itpub.net/22259926/viewspace-631423

里面说的,如果inverse为false的化,delete不会修改order表单,即对应关系没有维护。但是新增的时候,会增加order表单,

下面是转载的,

========================CASCADE===========================


cascade 有五个选项 分别是: all ,delete ,none,save-update,delete-orphan ;
        all : 所有情况下均进行关联操作。
        none:所有情况下均不进行关联操作。这是默认值。
        save-update:在执行save/update/saveOrUpdate时进行关联操作。
        delete:在执行delete时进行关联操作。
        delete-orphan: 当save/update/saveOrUpdate时,相当于save-update ;当删除操作时,相当于delete ;


all的意思是save-update + delete
all-delete-orphan 的意思是当对象图中产生孤儿节点时,在数据库中删除该节点
all比较好理解,举个例子说一下all-delete-orphan:
Category与Item是一对多的关系,也就是说Category类中有个Set类型的变量items.
举个例子,现items中存两个Item, item1,item2,如果定义关系为all-delete-orphan
当items中删除掉一个item(比如用remove()方法删除item1),那么被删除的Item类实例
将变成孤儿节点,当执行category.update(),或session.flush()时
hibernate同步缓存和数据库,会把数据库中item1对应的记录删掉

========================LAZY===========================

结论1: HQL代码 > fetch(配置) > lazy (配置)
结论2: 默认 lazy="true"
结论3: fetch 和 lazy 主要是用来级联查询的, 

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

========================batch-size==============================

今天有个问题,就是一对多查询时候,比如Customer里面包含了太多Order表单怎么优化?当时懵了

其实可以使用Hibernate的延迟加载功能,即时Lazy=true,只有在真正需要的时候,才去从数据库加载“本体”,Customer的某个Order,只用当该Order真正需要时候的,采取从数据库加载
分享到:
评论

相关推荐

    hibernate 级联查询

    **标题解析:** “Hibernate 级联查询”是指在使用...以上是对“Hibernate级联查询”这一主题的详细说明,涵盖了相关概念、配置、使用示例以及可能的源码解析。由于没有具体的压缩包内容,无法提供更详细的实例分析。

    Spring+Hibernate 一对一映射级联增删改查小例子

    在Java Web开发中,Spring和Hibernate是两个非常重要的框架,它们分别是依赖注入和对象关系映射(ORM)的杰出代表。本示例将探讨如何在Spring与Hibernate整合的环境中实现一对一(OneToOne)映射,并进行级联操作,...

    hibernate说明文档

    以上是对“hibernate说明文档”标题和描述中的关键知识点的详细介绍,旨在帮助读者深入了解Hibernate的工作原理及其应用场景。通过掌握这些核心概念和技术,开发者可以更加高效地使用Hibernate框架来处理复杂的...

    常用 Hibernate 映射配置说明.doc

    Hibernate支持多种级联选项,如`none`(默认值,不执行任何操作)、`all`(执行所有级联操作)、`save-update`(仅执行保存和更新操作)、`delete`(仅执行删除操作)。此配置可以显著简化对象关系映射(ORM)的代码...

    hibernate说明及demo的例子

    Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者在Java对象和数据库记录之间建立映射,从而简化数据库编程。在这个“hibernate说明及demo的例子”中,我们将深入探讨Hibernate的核心概念和功能,并...

    hibernate全套资料文档API及配置说明文档

    **hibernate全套资料文档API及配置说明文档** 在Java世界中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它允许开发人员使用面向对象的编程方式来操作数据库,从而降低了数据库操作的复杂性。这个压缩包...

    Hibernate3.2_API

    4. **HIBERNATE - Relational Persistence for Idiomatic Java.pdf**:这本书可能是关于Hibernate的深入教程,讨论了如何在Java中实现关系持久化,以及如何利用Hibernate的特性来优化应用程序的性能。 5. **...

    Hibernate4.1.11中文手册

    这个版本支持JPA2规范,提供了更灵活的配置选项,增强了对延迟加载(Lazy Loading)和级联操作的支持。 三、参考文档 参考文档详细介绍了Hibernate的核心概念和技术,包括配置、实体映射、会话管理、查询、缓存策略...

    hibernate开发实例源码,由浅入深众多实例

    "其中有初学者使用的具体实例,也有进阶程序员常用的一些hibernate实例"说明了内容的全面性,不仅包括了基础操作,也包括了高级特性和用法,覆盖了Hibernate的多个方面。 **标签解析** - "hibernate":这是Java...

    hibernate外键实现一对一单向关联关系源码

    以上就是关于Hibernate外键实现一对一单向关联关系的详细说明。这个知识点涉及到数据库设计、ORM框架的使用,以及Java编程实践,对于理解和使用Hibernate进行数据库操作具有重要意义。在实践中,应结合具体业务场景...

    Struts2+Spring+Hibernate配置说明及源码

    Hibernate支持懒加载和级联操作,优化了性能和数据操作的复杂度。 这个压缩包可能包含以下内容: 1. 项目结构:展示了典型的Java Web项目目录,包括src/main/java(源代码)、src/main/resources(配置文件)和src/...

    Hibernate_实体类_注解_说明

    Hibernate作为Java领域中流行的ORM(对象关系映射)框架,提供了丰富的注解来简化实体类与数据库表之间的映射。本文将深入解析一系列关键注解,帮助理解Hibernate如何实现这一过程。 #### 1. `@Entity`与`@Table` ...

    Hibernate.zip

    以下是对Hibernate核心概念和功能的详细说明: 1. **对象关系映射(ORM)**:Hibernate提供了一种方式,将Java类映射到数据库表,通过对象进行数据操作,从而解耦了业务逻辑与数据库操作。 2. **配置文件...

    hibernate资料

    10. **性能优化**:包括缓存策略、批处理更新和延迟加载等提升Hibernate性能的技巧。 **Hibernate原理与配置快速入门.pdf** 这份文档更专注于Hibernate的基础使用和配置,适合初学者快速掌握Hibernate。它可能包含...

    Hibernate 4.1.1 API 文档

    Hibernate 4.1.1 API 文档是针对Hibernate ORM框架的一个关键参考资料,它包含了该版本所有公开接口、类和方法的详细说明。Hibernate是Java领域广泛使用的对象关系映射(ORM)工具,它允许开发者使用面向对象的方式...

    hibernate annotations 中文参考手册

    ### Hibernate Annotations 中文参考手册概览 #### 版本说明 ...随着框架版本的不断更新,Hibernate 注解提供了越来越多的功能和优化选项,使得 Java 应用程序与数据库之间的交互变得更加高效和便捷。

    hibernate3.0 jar包

    7. **类型转换和级联操作**:Hibernate提供了一些内置的类型转换器,并允许自定义类型转换。级联操作允许在一个对象的操作影响到与之关联的其他对象。 8. **事件监听器**:Hibernate允许注册事件监听器,如在对象的...

    Java 精通Hibernate对象持久化技术权威指南

    此外,压缩包中的《Hibernate3.2中文参考文档.chm》是官方的中文版文档,提供了详细的技术参考和API说明,有助于读者深入研究特定的功能和API用法。 总的来说,这本书和配套文档为Java开发者提供了全面的Hibernate...

    hibernate:一对多,多对多,一对一,乐观锁,二级缓存

    以上就是对给定标题和描述中提到的Hibernate相关知识点的详细解析,包括关系映射、乐观锁机制以及缓存策略的使用,这些都是开发高效、稳定的Java持久化应用的重要组成部分。在实际项目中,理解并熟练运用这些概念,...

    hibernate驱动文件

    8. **级联操作**:在关联关系中,可以设置级联操作,比如保存一个父对象时,其子对象也会被自动保存,避免了手动维护这些关系。 9. **延迟加载(Lazy Loading)**:这是一种优化策略,允许在真正需要数据时才加载...

Global site tag (gtag.js) - Google Analytics