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

简介:
 

相信用过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月前
|
SQL
sql语句加正则 简化查询
sql语句加正则 简化查询
16 0
sql语句加正则 简化查询
|
2月前
|
Java 数据库连接 数据库
hibernate正向生成数据库表以及配置——Teacher.hbm.xml
hibernate正向生成数据库表以及配置——Teacher.hbm.xml
16 1
|
2月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(Dept.java)
Hibernate中使用Criteria查询及注解——(Dept.java)
16 1
|
1月前
|
SQL 关系型数据库 MySQL
mysql一条sql查询出多个统计结果
mysql一条sql查询出多个统计结果
16 0
|
3天前
|
SQL 前端开发
基于jeecgboot复杂sql查询的列表自定义列实现
基于jeecgboot复杂sql查询的列表自定义列实现
|
6天前
|
SQL 数据库
SQL数据库基础语法-查询语句
SQL数据库基础语法-查询语句
|
7天前
T-sql 高级查询( 5*函数 联接 分组 子查询)
T-sql 高级查询( 5*函数 联接 分组 子查询)
|
7天前
|
机器学习/深度学习
T-sql 各种查询命令
T-sql 各种查询命令
|
13天前
|
SQL 关系型数据库 数据库
SQL 42501: Postgresql查询中的权限不足错误
SQL 42501: Postgresql查询中的权限不足错误
|
14天前
|
SQL 分布式计算 大数据
MaxCompute操作报错合集之在sql 里嵌套查询时,查询条件带有instr时报错,如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。