浏览 3043 次
锁定老帖子 主题:Hibernate映射不规则查询结果
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-21
最后修改:2008-11-29
hibernate的sqlQuery有没有setResultTransformer这个方法, 大致是问如何为特殊返回结果的 Query 映射持久类。
今天看到网友 pistol, 发贴由于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。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-11-22
不错的办法,对付一些概念混乱的表很有用呢
回去就改用这个方法试试,总算可以把我以前的一个错误的映射改回来了 |
|
返回顶楼 | |
发表时间:2008-11-23
这种方式在hibernate 2里也是支持的,就是麻烦一些,每一个Sql查询都都得在hbm中定义一个这样的VO。
另外,作为一个class定义,一定得有id属性的定义,所以需要在Sql中拼一个id字段,并且id字段值在同一次查询中不能重复。实际上可能我的Sql查询中根本不需要id这样的属性,所以有条件的话升级hibernate到3.2以上吧。 |
|
返回顶楼 | |