`
aaronhugo
  • 浏览: 19009 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

hibernate实现多表连接查询结果处理

 
阅读更多

Hibernate使用总结
hibernate 实现多表连接查询结果处理
因多表连接查询在项目中用的比较多,且查询结果集不与任何一个实体类对应,怎么解决呢?
1,传统方式
    查询并返回各个表的字段,调用query.List(),这个List是一个Object[]值,之后循环获取数组中的各个值,也就是说这里需要自己手动获取封装数据,基本代码如下:

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 ];       
}

  
2,构造自己的复合类型
    a,添加一个映射类
        eg:新建一个映射类UserWithRole,需要带属性的构造函数;
       

HQL = SELECT NEW  UserWithRole(U.ID,U.NAME,R.NAME) FROM User U, ROLE R WHERE ......;

 
    b,不添加映射类,直接使用已有实体类,添加需要的构造函数;
       

HQL = SELECT NEW  User(U.ID,U.NAME,R.NAME) FROM User U, ROLE R WHERE ......;

 
       
    SQL中UserWithRole/User(U.ID,U.NAME,R.NAME)的字段数就是UserWithRole/User类中的构造函数,
    这里需要注意使用时可能会报异常:Unable to locate appropriate constructor on class
    出现这个异常需要检查以下几种情况:
        1)参数构造器的参数类型是否正确
        2)参数构造器的顺序和hql中的顺序是否一致
        3)参数构造器的参数个数是否和hql中的个数一致
        4)参数构造器的参数类型是否TimeStamp
    其中第4种情况较为复杂,需要做特殊处理:
    基本代码如下:
       

HQL = SELECT NEW EXAMPLE(E.ID,A.NAME,A.DATE,A.EMAIL) FROM EXAMPLE E, ATABLE A WHERE .....;

 
    实体:
 

       public class Example{
           
            private TimeStamp date;
            //其他属性这里省略...
           
            //需要注意其构造函数
            public Example(Long id, String name, Object date, String email){
                this.id = id;
                this.name = name;
                this.date = StringUtls.stringToTimeStamp(date.toString());//注意:这里需要将Object转换成TimeStamp;
            }
        }

 本文最后有借鉴之处:http://blog.sina.com.cn/s/blog_4ad7c2540102uzkc.html

 

分享到:
评论

相关推荐

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

    总结,"Hibernate 多表连接分页查询示范项目"是一个实用的示例,它展示了如何在实际应用中利用 Hibernate Criteria API 实现复杂查询和分页,对于学习和掌握 Hibernate 的高级特性和数据库操作技巧非常有帮助。...

    hibernate多表联合查询

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

    Spring+Hibernate实现用户登录

    本项目"Spring+Hibernate实现用户登录"旨在演示如何整合这两个框架,构建一个能够处理用户登录功能的Web应用程序。下面将详细介绍这个项目涉及的关键知识点。 1. **Spring框架**:Spring是一个全面的Java应用开发...

    hibernate实现递归查询

    本文将深入探讨如何使用Hibernate实现递归查询,以解决在数据层次结构中涉及父节点与子节点关系时的问题。递归查询通常用于处理树形结构的数据,例如组织结构、菜单系统或者文件目录等。 首先,我们需要了解递归的...

    hibernate多对多查询

    在Hibernate中,处理多对多关系需要定义两个实体类,每个实体类对应一个表,并在其中一个或两个实体类中声明`@ManyToMany`注解。这个注解用于表示两个实体之间的多对多关联。例如,我们有`Student`和`Course`两个类...

    Hibernate基于连接表的一对多单向关联

    总结,"Hibernate基于连接表的一对多单向关联"涉及到的主要知识点包括:数据库设计的一对多关系、Hibernate的实体映射、单向关联的配置、以及如何在Java代码中操作和查询这种关联。理解并熟练应用这些知识点,对于...

    hibernate实现数据库表的多种关系

    **标题解析:**“hibernate实现数据库表的多种关系” 在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者用面向对象的方式处理数据库操作。本示例着重于如何利用Hibernate来实现不同...

    JSP+Hibernate实现留言板

    在"JSP+Hibernate实现留言板"的项目中,JSP文件主要负责接收用户输入,显示留言列表,以及处理提交的留言。例如,一个简单的JSP页面可能包含一个表单让用户输入姓名和留言内容,然后通过POST请求提交到服务器。...

    hibernate分页查询 数据库连接

    本篇将深入探讨Hibernate中的分页查询功能以及它如何处理数据库连接,帮助你更有效地管理大数据量的查询操作。 首先,我们来看一下什么是分页查询。在Web应用中,当用户需要浏览大量数据时,一次性加载所有数据不仅...

    Hibernate各种查询:联表查询 分页查询 位置参数查询(?) 占位符查询(冒号查询) 统计查询

    总的来说,Hibernate的`Criteria`、`Query`以及QBC(Query By Criteria)提供了灵活且强大的查询手段,它们不仅支持基本的单表查询,还能处理复杂的联表、分页、参数绑定和统计需求,是Java开发者进行数据库操作的...

    Hibernate ORM - 一对多双向连接表关联关系

    “Hibernate ORM - 一对多双向连接表关联关系”这个标题指出我们要讨论的是Hibernate ORM框架中的一种特定数据库关联模型,即一对多的双向关联。在Hibernate中,ORM(对象关系映射)是一种技术,它允许我们用面向...

    Hibernate实现原理模拟

    **Hibernate实现原理模拟** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本教程将通过模拟Hibernate的实现原理,帮助开发者深入理解其工作方式,以便更好地运用到实际...

    Hibernate ORM - 多对多双向连接表关联关系

    6. **源码分析**:为了更好地理解这一过程,你可以查看Hibernate源码,了解它如何处理多对多关联的SQL语句生成、中间表的操作以及事务管理。这有助于提高对Hibernate框架的理解。 通过以上步骤,我们可以在...

    hibernate 自连接 emp例子

    在这个特定的例子中,我们关注的是如何在Hibernate中实现自连接查询,以处理Oracle数据库中EMP表的树状结构问题。 首先,自连接查询是指一个表与自身进行连接的操作,常用于处理具有层级关系的数据,例如员工的上...

    hibernate多对多关联映射

    在Hibernate中,这种关系需要通过中间表(也称为关联表或连接表)来实现,它通常包含两个外键,分别引用两个参与关联的实体。 二、配置多对多关联 1. 实体类标注 在Java实体类中,我们需要使用`@ManyToMany`注解来...

    Hibernate多表查询.txt

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

    hibernate的查询方式介绍和hibernate的批处理和连接池配置hibernate

    - 可以通过子句实现对多个表的联合查询。 - 示例:查询学生及其所在班级的信息。 ```java String hql = "select s.stuId, s.stuName, b.banjiName from Student s, Banji b where s.banji.banjiId = b.banjiId";...

    hibernate+struts实现数据库查询的例子

    8. **结果处理**:查询结果通常会被转化为Model对象,然后由Struts2的Result返回给前端页面展示。 9. **页面展示**:创建JSP或FreeMarker模板,使用Struts2的标签库来展示从Action传递过来的数据。 在提供的压缩包...

    hibernateHQL关联查询

    通过本文的介绍,我们不仅回顾了数据库表连接的基础知识,还深入了解了Hibernate HQL关联查询的实现原理及应用方法。对于开发者而言,掌握HQL关联查询不仅可以提高查询效率,还能让代码更加简洁易懂。希望本文能帮助...

    struts2+hibernate实现登录及增删改操作

    综上所述,"struts2+hibernate实现登录及增删改操作"涉及到的是如何利用这两个框架构建一个完整的Java Web应用,包括用户身份验证、数据库操作以及对数据的增删改等核心功能。这个小案例可以帮助开发者理解并熟练...

Global site tag (gtag.js) - Google Analytics