`
glamey
  • 浏览: 90197 次
  • 性别: Icon_minigender_1
  • 来自: bj
社区版块
存档分类
最新评论

关于hibernate纯sql查询返回结果集的问题(hbm.xml中不写多表关联)

    博客分类:
  • J2EE
阅读更多

    相信用过hibernate的兄弟们都会因为多表复杂查询后,为返回的结果如何组装到一个VO中而烦恼不已。我也不停的为此而烦恼,但是在看了hibernate的transform后,感觉这个方法还挺管用的。
     例如现在有两张表,一张是user表,放了一些用户的信息,另外一张表是用户发表的帖子,里边有一个user的外键。我们需要查询出来,某个人发布的帖子,sql如下:

select u.userName,p.title,p.addTime from user as u,post as p where u.id=p.userId


但是我们的POJO映射仅仅是做了user,post表的映射,这个时候,我们需要写一个PostVO类,里边放着了用户的信息和帖子的信息的属性,设置get\set方法,务必保证这个类里边有一个默认的构造函数。
然后我们开始写这个数据库操作的dao,代码如下:

String sql = "select u.userName as userName p.title as title ,p.addTime as addTime from user as u,post as p where u.id=p.userId"
Query q = factory.getCurrentSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(PostVO.class));


红字部分必须跟PostVO中的属性一直,这样就可以返回一个针对PostVO的一个集合。

其实大家可以看下hibernate这一部分的源码就会发现,主要是使用了AliasToBeanResultTransformer这个类,通过sql的查询,会返回数组,然后hibernate根据数据表的映射,自动帮我们来set对应的字段属性,所以标红的部分务必要跟VO中的属性值一直,要不然会报错的。
如果需要的话,大家也可以重写这个类。例如VOResultTransformer。然后在dao中更改成

setResultTransformer(new VOResultTransformer(PostVO.class));


即可。

 

4
0
分享到:
评论

相关推荐

    hibernate3.6 文档(pdf 格式)

    3.4.1. SQL Dialects .......................................................................................... 42 3.4.2. Outer Join Fetching ..............................................................

    ssh框架在application.xml中配置数据源所需jar

    <?xml version="1.0" encoding="UTF-8"?> <!-- - Application context definition for JPetStore's business layer. - Contains bean references to the transaction manager and to the DAOs in - ...

    jax-ws 方式发布web Service 后台用Hibernate实现,前端.NET通过引用服务方式实现

    采用jax-ws发布Web Service服务,支持java客户端和.Net客户端调用,数据库采用oracle10g,里面有创建数据库脚本文件createTable_Oracle10g.sql,由于Hibernate映射表中会存在循环引用对象问题,导致序列化失败,所以...

    hibernate.properties

    #hibernate.proxool.xml proxool.xml #hibernate.proxool.properties proxool.properties ################################# ### Plugin ConnectionProvider ### ################################# ## use a ...

    hibernate-prj1

    2、Hibernate 的主要作用是简化应用的数据持久层编程,不仅能管理 Java 类到数 据库表的映射,还提供数据查询和获取数据的方法,从而大幅减少了开发人 员编写 SQL 和 JDBC 代码的时间; 3、Hibernate 框架主要包括...

    车间信息管理lxf_GraduationProject

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE hibernate-configuration (View Source for full doctype...)> - <!-- Generated by MyEclipse Hibernate Tools. --> - <hibernate-configuration> - ...

    halloworld

    ..........\...\..\..\persist\Xiangmubiao.hbm.xml ..........\...\..\..\.......\Xiangmubiao.java ..........\...\..\..\server\server.java ..........\...\hibernate.cfg.xml ..........\...\struts.xml ...

    Hibernate开发jar包

    Hibernate开发jar包 5.07 配置文件内容 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" ...

    Android购物网站源代码,安卓商城购物源码,安卓APP源码商业版

    │ │ hibernate.cfg.xml │ │ struts.xml │ │ │ └─com │ └─aw │ ├─action │ │ BillAction.java │ │ GoodsAction.java │ │ UsersAction.java │ │ │ ├─bean │ │ Bill.hbm.xml...

    Hibernate笔记 马士兵

    三、 Hibernate.cfg.xml:hbm2ddl.auto 16 四、 搭建日志环境并配置显示DDL语句 16 五、 搭建Junit环境 16 六、 ehibernate.cfg.xml : show_sql 17 七、 hibernate.cfg.xml :format_sql 17 八、 表名和类名不同,...

    struts_hibernate框架权限管理系统

    1,默认配置为mysql5.0 hibernate.cfg.xml.mssql为Ms sqlserver2000数据库配置文件 hibernate.cfg.xml.oracle为oracle9i数据库配置文件 TblNews.hbm.xml.oracle为oracle9i的tbl_news表映射文件 这些...

    基于Jsp的在线考试系统毕业设计论文

    所有的数据库表不是用mysql企业管理器或查询分析器来完成的,而是用hibernate的pojo类和hbm.xml文件导入的,然而,配置这些关联映射却很麻烦,往往考虑不到而配置成单向关联,在开发过程中又发现双向关联都用到了,...

    实体类对应关系处理hibernate

    自己根据课本总结的使用hibernate时,实体类间映射文件即*.hbm.xml文件的写法。如果你正在学习hibernate,保证会对你有所帮助。

    hibernate 3中的缓存小结

    当应用程序调用Session的save()、update()、savaeOrUpdate()、get()或load(),以及调用查询接口的list()、iterate()或filter()方法时,如果在Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级...

    Hibernate 多数据库支持解决方案

    Hibernate多数据库支持解决方案 一、 去掉数据库级的外键关联 二、 如何动态加载.hbm.xml文件 三、 配置文件的加载 四、 大字段处理 五、 hibernate主键生成器(数值型主键操作方法) 六、 Oracle 转换 SQL Server ...

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

     15.3.4 把多对多关联分解为两个一对多关联  15.4 小结  15.5 思考题 第16章 Hibernate的检索策略  16.1 Hibernate的检索策略简介  16.2 类级别的检索策略  16.2.1 立即检索  16.2.2 延迟检索  16.3 一对多...

    实现JSP+SERVLET+Hibernate基本分页

    1、可以取消hibernate.cfg.xml中<property name="hbm2ddl.auto">create注释创建表结构 2、可以通过src下的db.sql创建表 V2.0版本更新内容 1、添加struts2.1支持 2、修复没查到数据,组显示负数BUG V1.5版更新内容 1...

    jdbc基础和参考

    2.如果找不到,get()会立即发送sql语句到数据库中查找数据,如果找到就返回,如果找不到返回null; load:(使用延迟加载策略) 1.load()方法默认要加载的对象一定存在,所以很放心的使用代理对象,等到用到的时候从...

    Hibernate1

    对 Hibernate 初体验 1.新建一个java工程,...但运行上面的测试类之后,我们查看一下数据库中student表,表中将会多一条数据。 Hibernate的初体验就说到这,相信通过上面的例子,我们对hibernate大致有了一些了解了。

    ssh(structs,spring,hibernate)框架中的上传下载

    这是Hibernate3引入的新特性,对于包含重量级大数据的表字段,这种抽取方式提高了对大字段操作的灵活性,否则加载Tfile对象的结果集时如果总是返回fileContent,这种批量的数据抽取将可以引起数据库的"洪泛效应"。...

Global site tag (gtag.js) - Google Analytics