`
空指针异常
  • 浏览: 22601 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

[转载]Hibernate 多表查询结果集的处理

阅读更多
原文地址:http://blog.csdn.net/sun8288/article/details/8132181

   Hibernate 是JDBC的轻量级封装,一款杰出的ORM框架。通过它,可以建立数据表与表对象间的联系。
   Hibernate的查询可通过HQL 和Criteira实现。本文仅展示用HQL实现多表查询,并针对返回的结果集进行对象封装。

              如果我们在Hibernate中需要查询多个表的不同字段,那么如何来获取Hibernate多表查询的结果呢?有两种方式:

1、 利用Hibernate重写的List,从Obeject[ ]中取各个字段分别转化成对应类型,如下:

Query q = session.createQuery(" select members, classInfo.className " +       
    " from Members members, ClassInfo classInfo " +       
    " where members.level = classInfo.classCode ");          
List result = q.list();       
Iterator it = result.iterator();       
while (it.hasNext()) {       
   Object[] tuple = (Object[]) it.next();       
   Members members = (Members) tuple[ 0 ];       
   String className = (String) tuple[ 1 ];       
}
  
这是获取Hibernate多表查询的结果的最常用的方式,利用Hibernate为了实现懒加载重写所有Collection接口实现。

2、构造自己的复合类型,如下:
Query q = session.createQuery
(" select new ${pkg}.NewMembers(members, classInfo.className) " +       
    " from Members members, ClassInfo classInfo " +       
    " where members.level = classInfo.classCode ");     
Query q = session.createQuery
(" select new NewMembers(members, classInfo.className)
 " + " from Members members, ClassInfo classInfo " + " 
where members.level = classInfo.classCode ");
 
当然我们需要有一个NewMembers类和相应的构造方式。

需要特别指出的是,定义的复核类型NewMembers务必要实现java.io.Serializable接口,定义相应的构造方法:一个默认不带参数的,一个根据需要带参数的(通常是全参,呵呵,因为本身成员变量就是量身定制);此外,在使用中,发现必须指定自定义类型的完整类名${pkg}.NewMembers,${pkg}为NewMembers的包名。

第二种方法显然扩展性更好。
分享到:
评论

相关推荐

    Hibernate连表查询 Hibernate连表查询

    如果查询结果包含多个字段,并且希望将这些字段封装成一个对象,则可以使用Hibernate的投影列表功能,或者手动创建一个新的类来存储查询结果。 ### 总结 本文主要介绍了Hibernate中的连表查询方法及其在实际开发中...

    hibernate多表联合查询

    通过以上两种方式,我们不仅能够灵活地进行多表联合查询,还可以有效地将查询结果映射到Java对象中。这对于提高代码的可读性和维护性非常有帮助。 总之,Hibernate提供了一系列强大的工具和技术,可以帮助开发者...

    hibernate 多表查询

    hibernate 多表查询 hibernate 多表不同于一般的sql嵌套查询,嵌套查询是不支持的,所以必须要配置好才能实现多表!只要配置好了,还是特别好用的

    Hibernate 多表连接分页查询示范项目

    7. **处理结果**:遍历查询结果,将数据绑定到视图或者进一步处理。 总结,"Hibernate 多表连接分页查询示范项目"是一个实用的示例,它展示了如何在实际应用中利用 Hibernate Criteria API 实现复杂查询和分页,...

    hibernate多表查询详解

    例如,通过`Criteria API`或`HQL`(Hibernate Query Language)进行多表联接查询,可以将查询结果转化为Object数组。这种方法简单直观,但缺乏类型安全,因为数组中的每个元素都是Object,需要在代码中进行强制类型...

    hibernate 进行多表查询每个表中各取几个字段

    无论是HQL还是Criteria,查询结果通常都是一个List对象,其中每个元素是根据投影定义的一个匿名类型对象。在实际开发中,我们可能需要将这些结果映射到自定义的Java Bean,可以通过`Transformers.aliasToBean()`实现...

    Hibernate多表查询.txt

    Hibernate作为一款优秀的ORM框架,提供了多种方式来处理多表查询,简化了这一过程,使开发者能够以更面向对象的方式进行数据操作。 ### 多表查询的实现方式 #### 1. 使用HQL(Hibernate Query Language) HQL是一...

    hibernate将本地SQL查询结果封装成对象

    Hibernate的本地SQL查询功能为我们提供了一种灵活的方式来执行复杂的数据库操作,同时通过`addEntity()`、`addScalar()`和`Transformers.aliasToBean()`等方法,我们可以方便地将查询结果封装成Java对象,从而简化...

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

    本文将深入探讨如何通过配置优化Hibernate的多表查询,以提高应用的性能。 1. **联合查询优化**: 在进行多表查询时,Hibernate默认可能会生成多个单表查询,这会导致大量的数据库往返,降低效率。通过配置`@Join...

    JQuery的启发-教你如何二次处理及优化IBatis和Hibernate的查询结果集

    本文将深入探讨JQuery的启发,以及如何利用这些思想来优化对这两个框架的查询结果集进行二次处理。 首先,让我们了解JQuery的基本理念。JQuery是一个强大的JavaScript库,它提供了简洁的API来操作DOM(文档对象模型...

    Hibernate-基础联表模板

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

    Hibernate_query查询数据表中的一个字段.

    本篇将详细讲解如何使用Hibernate进行查询,特别是针对数据表中的一个特定字段。 一、Hibernate简介 Hibernate是Java领域的一个开源ORM框架,它简化了数据库操作,通过映射Java类到数据库表,可以将数据库操作转化...

    hibernate多表查询[定义].pdf

    在本案例中,我们关注的是Hibernate中的多表查询,这是在处理复杂数据关系时常见的需求。 多表查询涉及到了三个或更多的表之间的关联,这在现实世界的业务场景中很常见,如学生信息与班级信息的关联。在Hibernate中...

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

    在这个主题中,我们将深入探讨Hibernate的ORM(对象关系映射)机制以及如何在实际应用中处理多个数据库表之间的关联。 Hibernate是一个流行的Java持久化框架,它简化了Java应用程序与数据库之间的交互。通过使用ORM...

    Hibernate多对多关联添加及查询示例

    本示例主要关注的是Hibernate中的多对多关联映射及其添加与查询方法。 多对多关联是数据库设计中的一种常见关系类型,指的是两个实体之间可以存在多个对应关系。例如,在学生与课程的关系中,一个学生可以选修多门...

    struts2+hibernate+spring多表操作示例

    例如,通过Hibernate的 Criteria 或 HQL 查询语言,可以方便地执行多表的JOIN操作。级联保存时,只需要保存父对象,Hibernate会自动保存关联的子对象;级联删除则可以删除父对象时,同时删除所有关联的子对象。 5. ...

    hibernate将本地SQL查询结果封装成对象(最终).zip

    - 结果集转换:`addEntity()`方法用于指定查询结果应被映射到哪个实体类,`list()`或`scroll()`方法执行查询并返回结果集,这些结果集将自动封装为对应的Java对象。 5. 示例: 假设我们有一个`User`实体类,对应...

    hibernate的多态查询

    7. **示例应用**:在实际项目中,例如在设计用户系统时,用户可以是普通用户、管理员等多种角色,它们都继承自一个抽象的`User`类,这时可以利用Hibernate的多态查询来统一处理不同类型用户的查询操作。 8. **性能...

    hibernate实现递归查询

    将查询结果缓存起来,避免重复计算。可以使用二阶缓存(如 Ehcache 或 Infinispan)来存储整个节点树,当数据更新时,再进行刷新。 5. **注意事项** 递归查询可能导致无限循环,所以在设计递归查询时必须设置好...

    struts2+spring2+hibernate3注册查询搜索分页实例

    在查询和搜索功能中,Hibernate3通过HQL(Hibernate查询语言)或 Criteria API来执行SQL查询,简化了数据库操作。在分页功能中,Hibernate3的Criteria API可以配合Pageable接口实现数据的分页检索。 在分页功能上,...

Global site tag (gtag.js) - Google Analytics