Hibernate映射不规则查询结果

Hibernate 映射 DTO 实践
本文介绍了一种在 Hibernate 中映射 DTO 的方法,即通过创建类似视图的实体并建立 hbm.xml 文件来实现对特殊返回结果的 Query 映射。文中还讨论了原生 SQL 的使用技巧及作者在 SSH 框架中的改进。
今天看到网友 pistol, 发贴[url=http://www.iteye.com/topic/247943] hibernate的sqlQuery有没有setResultTransformer这个方法[/url], 大致是问如何为特殊返回结果的 Query 映射持久类。

由于hibernate3.2之前没有 setResultTransformer 这个方法。推荐你一个简单的办法。

将你新建的 DTO类(我们的项目叫VO) 的sql 看作一个View实体,就像普通表一样,为其建立一个 hbm.xml 文件,其中的
<class name="xxx.xxx.CatDTO" table="V_CAT">

并设置字段映射,tablename 随便写一个名字,例如 V_CAT, 就是看作一个虚表。

然后,
     
session.createQuery(HQL );
session.createSQLQuery( SQL).addEntity("cat", voClass);

这样就达到你的目的了。

对HQL来说,直接使用就行了。
不过,对原生sql有个问题,你的sql语句必须按照hibernate的要求,为每列写成alias的形式。
SELECT {cat}.ID AS {cat.id}, {cat}.SEX AS {cat.sex} FROM CAT {cat} 

我已在公司的SSH框架中进行了改进, 直接丢进native sql,就能执行。
SELECT NAME, BIRTHDATE FROM CATS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值