`
aaronhugo
  • 浏览: 18774 次
  • 性别: 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+中文文档

    7.3. 使用连接表的单向关联(Unidirectional associations with join tables) 7.3.1. 一对多(one to many) 7.3.2. 多对一(many to one) 7.3.3. 一对一(one to one) 7.3.4. 多对多(many to many) 7.4. ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     17.1.10 按主键逐个处理查询结果(iterate()方法)  17.1.11 可滚动的结果集  17.1.12 在HQL查询语句中绑定参数  17.1.13 设置查询附属事项  17.1.14 在映射文件中定义命名查询语句  17.1.15 在HQL查询语句中...

    HibernateAPI中文版.chm

    7.3. 使用连接表的单向关联(Unidirectional associations with join tables) 7.3.1. 一对多(one to many) 7.3.2. 多对一(many to one) 7.3.3. 一对一(one to one) 7.3.4. 多对多(many to many) 7.4. ...

    hibernate3.2中文文档(chm格式)

    7.3. 使用连接表的单向关联(Unidirectional associations with join tables) 7.3.1. 一对多(one to many) 7.3.2. 多对一(many to one) 7.3.3. 一对一(one to one) 7.3.4. 多对多(many to many) 7.4. ...

    Hibernate 中文 html 帮助文档

    7.3. 使用连接表的单向关联(Unidirectional associations with join tables) 7.3.1. 一对多(one to many) 7.3.2. 多对一(many to one) 7.3.3. 一对一(one to one) 7.3.4. 多对多(many to many) 7.4. 双向...

    Hibernate中文详细学习文档

    7.3. 使用连接表的单向关联(Unidirectional associations with join tables) 7.3.1. 一对多(one to many) 7.3.2. 多对一(many to one) 7.3.3. 一对一(one to one) 7.3.4. 多对多(many to many) 7.4. ...

    最全Hibernate 参考文档

    7.3. 使用连接表的单向关联(Unidirectional associations with join tables) 7.3.1. 一对多(one to many) 7.3.2. 多对一(many to one) 7.3.3. 一对一(one to one) 7.3.4. 多对多(many to many) 7.4. 双向...

    hibernate 教程

    Hibernate提供的JDBC连接 3.5. 可选配置属性 3.5.1. SQL Dialects SQL 方言 3.5.2. 外连接抓取(Outer Join Fetching ) 3.5.3. 二进制流 3.5.4. 自定义CacheProvider 3.5.5. 事务策略配置 ...

    hibernate 体系结构与配置 参考文档(html)

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    Hibernate教程

    8.3. 使用连接表的单向关联(Unidirectional associations with join tables) 8.3.1. 一对多(one to many) 8.3.2. 多对一(many to one) 8.3.3. 一对一(one to one) 8.3.4. 多对多(many to many) 8.4. ...

    Hibernate注释大全收藏

    Hibernate 使用 SQL Union 查询来实现这种策略。 这种策略支持双向的一对多关联,但不支持 IDENTIFY 生成器策略,因为ID必须在多个表间共享。一旦使用就不能使用AUTO和IDENTIFY生成器。 每个类层次结构一张表 @...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    7.3. 使用连接表的单向关联(Unidirectional associations with join tables) 7.3.1. 一对多(one to many) 7.3.2. 多对一(many to one) 7.3.3. 一对一(one to one) 7.3.4. 多对多(many to many) 7.4. ...

    深入浅出Hibernate源码

    (假若您希望使用其它用户名如root,您需要修改hibernate的数据库配置中的连接参数——位于hibernate.cfg.xml中,以及创建数据库表时的连接参数——位于build.xml中。) 7, 确认ant安装正确. ant可以在此下载: ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     17.1.10 按主键逐个处理查询结果(iterate()方法)  17.1.11 可滚动的结果集  17.1.12 在HQL查询语句中绑定参数  17.1.13 设置查询附属事项  17.1.14 在映射文件中定义命名查询语句  17.1.15 在HQL查询语句中...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     17.1.10 按主键逐个处理查询结果(iterate()方法)  17.1.11 可滚动的结果集  17.1.12 在HQL查询语句中绑定参数  17.1.13 设置查询附属事项  17.1.14 在映射文件中定义命名查询语句  17.1.15 在HQL查询语句中...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和Hibernate的整合方式 12.6.2 编写用户注册画面regedit.jsp 12.6.3 编写用户登录画面login.jsp 12.6.4 编写注册控制器RegeditAction.java ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     17.1.10 按主键逐个处理查询结果(iterate()方法)  17.1.11 可滚动的结果集  17.1.12 在HQL查询语句中绑定参数  17.1.13 设置查询附属事项  17.1.14 在映射文件中定义命名查询语句  17.1.15 在HQL查询语句中...

    struts2+HIbernate+Spring整合所需jar包

    struts2+HIbernate+Spring整合所需jar包 包含数据库连接池jar包 hibernate注解所需jar包 日志处理log4j及slf日志框架及实现的jar包

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和Hibernate的整合方式 12.6.2 编写用户注册画面regedit.jsp 12.6.3 编写用户登录画面login.jsp 12.6.4 编写注册控制器RegeditAction.java ...

Global site tag (gtag.js) - Google Analytics