`
小蛋蛋
  • 浏览: 81299 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Hibernate的检索方式

阅读更多
无意间看到的一篇文章,是有关hibernate的检索方式的
感觉很有用处,
下面是链接:
http://aumy2008.blogbus.com/logs/13835265.html
虽然还是有点不大懂,但是以后我会在此基础上进行一些稍微的补充的


关于setFetchMode:
FetchMode是让两个表建立连接,仅此而已。
例如:一个Emp只能属于一个dept,而一个dept中可以有好多Emp,
这时在Emp中就有一个dept对象
public class Emp{

.......
private dept d;
get()方法
set()方法
......
}
那么如果我想取出emp的时候顺便把它的dept相关的东西给取出来,此时我就需要setFetchMode("dept",FetchMode.JOIN),这样,我就可以正好把相关的dept里面的数据也取出来了,如果打印数据库执行语句,此时是生成的左连接,
但是注意:setFetchMode:仅仅能取出dept的数据,setFetchMode不能完成查询功能。如果查询条件里面有dept里面的东西,那setFetchMode就完不成相应的查询,如果想完成查询,你就需要用createAlias了

关于CreateAlias:
主要是用于查询的时候建立别名,所谓的"别名",自己认为就是另外起了一个名字,但是也不是这么简单。例如,我想查询所有dept的deptName是"人力资源部"的emp
那么我就应该用c.createAlias("dept","dept").add(Restrictions.eq("dept.deptName","人力资源部"));
这里就能完成上面的查询,其实createAlias也是做的left join

那么,也就是说:
setFetchMode可以建立两个表之间的连接,他建立连接的主要目的是为了取出相应的数据,
但是不能只用setFetchMode进行查询。例如,我们有:
c.setFetchMode("dept",FetchMode.JOIN);
c.add(Restrictions.eq("dept.deptName","人力资源部"));
如果只是这两句话的话,肯定有错误的。

而createAlias主要是用于查询,建立两表之间的关系,查询与两个表相关的数据。


那么上面的查询这样写就可以了:
c.setFetchMode("dept",FetchMode.JOIN);
c.createAlias("dept","dept").add(Restrictions.eq("dept.deptName","人力资源部"));
这样就可以既找出dept为“人力资源部”的人,又把与他相关的员工给找出来了。

缺点:setFetchMode和createAlias都会让数据库中的表与其他的表join起来,那么肯定查询的效率就低了。
还有,程序在查询的时候到底是外连接还是内连接我认为还是与你xml里面的配置是有关的。例如:你在emp的xml里面配置与dept之间的关系是多对一关系,并且在数据库里面配置了外键关联,那么无论你setFetchMode设置为什么,这里emp与dept进行关联的时候都会是inner join。绝对不会是外连接,这样写的原因我认为应该是与外键的关联有关吧,由于外键的关系,emp的dept必须在dept中,所以才会使用内连接
分享到:
评论

相关推荐

    day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询

    本教程将深入探讨"day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询"的主题,通过源码分析和实际工具的应用,来提升数据库查询的效率。 首先,我们了解Hibernate的检索方式。在Hibernate中,...

    day36 04-Hibernate检索方式:多表连接查询

    标题中的“day36 04-Hibernate检索方式:多表连接查询”表明这是一个关于Hibernate框架的教程,重点讲解如何在Hibernate中进行多表连接查询。在这个主题中,我们将深入探讨Hibernate的ORM(对象关系映射)机制以及...

    Hibernate检索方式

    ### Hibernate检索方式详解 #### 一、概述 Hibernate是一个强大的对象关系映射(ORM)框架,它可以将Java对象与数据库表进行映射,使得开发者能够更方便地进行数据的持久化操作。在Hibernate中,提供了多种检索...

    hibernate5--4.检索方式及策略

    一、Hibernate检索方式 1. **HQL(Hibernate Query Language)**: HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但它是基于类和对象的。你可以通过HQL来查询、更新和删除对象,而无需关心底层的SQL语法。...

    浪磬J2EE第一期 Hibernate专题 第六讲 检索方式

    一、Hibernate检索方式概述 Hibernate提供了多种检索数据的方法,以适应不同的需求场景。这些方法包括:HQL(Hibernate Query Language)、QBC(Query By Criteria)、Criteria API以及直接使用Session的get()和load...

    HIBERNATE检索策略

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

    java-Hibernate 检索

    HQL 是 Hibernate 最常用的检索方式,它支持所有 SQL 支持的检索方式。HQL 是一种面向对象的查询语言,可以使用 HQL 语句来检索对象。 步骤: 1. 获得 Session 2. 编写 HQL 3. 通过 session.createQuery(hql) 创建...

    传智168期JavaEE hibernate 姜涛 day36~day37(by阿滔)

    在讲解Hibernate检索方式之前,我们需要先了解Hibernate的基本概念。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用程序提供数据持久化服务。通过Hibernate,开发者可以使用Java对象来实现...

    Hibernate练习题

    11. Hibernate检索方式: - 有四种主要检索方式:HQL(Hibernate查询语言)、Criteria API、Query API(基于JPA的查询)、Native SQL。 12. 对象何时变为游离状态: - 在Hibernate中,当Session关闭时,所有与之...

    Hibernate详解2

    **Hibernate检索方式** 1. **导航对象图检索**:这是最直观的方式,通过已加载的对象导航到与之关联的其他对象,无需直接执行查询。 2. **OID检索**:根据对象的唯一标识(OID,Object Identifier)来获取对象,...

    基于Spring的Hibernate Search全文检索功能示例

    3. **Hibernate Search**:作为Hibernate的一个扩展,Hibernate Search提供了基于Lucene的全文检索功能,使得在数据库中的数据可以被快速、精确地搜索。 **二、集成Hibernate Search** 1. **配置依赖**:首先,你...

    mybatis和hibernate.pdf

    mybatie和hibernate相关面试题,包括常用xml标签,一二级缓存等信息hibernate优化以,hibernate在Java中的三种状态,hibernate检索方式

    javaweb方向面试宝典

    1. **Hibernate检索方式**: - 导航对象图检索:通过对象间的关联关系来获取数据,适合于对象关系映射紧密的情况。 - OID检索:通过对象标识符(Object Identifier)来获取对象,适用于已知对象ID的情况。 - HQL...

    Hibernate的检索策略

    ### Hibernate的检索策略详解 #### 一、概述 在Java持久化框架Hibernate中,检索策略是一种重要的机制,它主要用于控制对象何时以及如何加载到应用程序内存中。合理的检索策略不仅可以提高应用性能,还能简化代码...

Global site tag (gtag.js) - Google Analytics