相信用过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));

即可。

原文链接如下:http://glamey.iteye.com/blog/721019

最新文章

  1. java环境变量以及jdk、jre、jvm
  2. Android图片浏览器之图片删除
  3. javascript 复习代码
  4. jmeter笔记4
  5. 【CSS3】---颜色RGBA及渐变色
  6. tomcat6-7配置管理用户
  7. leetcode 二分查找
  8. sql语句复制表
  9. 【锋利的Jquery】读书笔记五
  10. utf8 文件 错误保存为gbk 中文乱码 解决方法
  11. AndroidGradle--瘦身apk(转发)
  12. appcompat v21: 让 Android 5.0 前的设备支持 Material Design
  13. MySql的下载和安装(解压版)
  14. IntelliJ IDEA(十) :常用操作
  15. Java并发编程面试题 Top 50 整理版
  16. 学习笔记TF054:TFLearn、Keras
  17. Python开发端口扫描器
  18. eclipse如何设置断点&断点处运行快捷键
  19. Java的反射机制的详细应用
  20. HTML学习笔记01-HTML简介

热门文章

  1. 【HDU 3938】Portal (并查集+离线)
  2. ubuntu下配置和使用ssh
  3. PHP递归生成树形数组
  4. 用git管理源代码
  5. 【转】ViewPager学习笔记(一)——懒加载
  6. 如何提高redmine的访问速度
  7. Redis_持久化之RDB
  8. js-JavaScript高级程序设计学习笔记17
  9. 一次更愚蠢的NOIP模拟赛
  10. MVC5-1 ASP.NET的管道流