Hibernate Native SQL查询的两个问题.
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate Native SQL查询的两个问题.相关的知识,希望对你有一定的参考价值。
1,session.createSQLQuery("SELECT * FROM CATS")
.addScalar("ID", Hibernate.LONG)
.addScalar("NAME", Hibernate.STRING)
.addScalar("BIRTHDATE", Hibernate.DATE)
返回的List怎样获取其中的元素?(cat表必须要有.hbm.xml映射?)
也就是 for(list) list.get(i)应该怎样进行正确转型?
2,
16.1.5. 返回非受管实体(Returning non-managed entities)
可以对原生sql 查询使用ResultTransformer。这会返回不受Hibernate管理的实体。
sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS")
.setResultTransformer(Transformers.aliasToBean(CatDTO.class))
(这个查询有人试过吗?我试过了,编译都通不过.)
这个查询指定:
SQL查询字符串
结果转换器(result transformer)
上面的查询将会返回CatDTO的列表,它将被实例化并且将NAME和BIRTHDAY的值注射入对应的属性或者字段。
说清楚点,怎么转?for(list) list.get(i)返回的是一个Object类型, 我要怎样转才能使得list.get(i)变为一个具有ID,NAME,BIRTHDATH属性的Cat类对象?当然
Cat cat = (Cat)list.get(i);是通不过的,提示类型转换出现异常.
System.out.println(list.get(i).getClass());//console print java.lang.Object!
回答是肯定的
2 要得到NAME, BIRTHDATE 的列表基本有两种方法
《1》写一个javabean,两个属性
然后把每条NAME, BIRTHDATE 的记录,都放进该javabean对象bean中,再把bean放到list里面
《2》就是用OBJECT数组,用法和javabean差不多,
唯一的区别就是在得到每条记录是对每个OBJECT元素进行相应的强制类型转换就OK了 参考技术A 直接转换为CATS不行吗?
System.out.println(list.get(i).getClass());
以上是关于Hibernate Native SQL查询的两个问题.的主要内容,如果未能解决你的问题,请参考以下文章
将从 Hibernate Native Query 返回的值映射到模型
使用 Native SQL Hibernate 从存储过程中检索值
Hibernate Native 查询在结果数组中返回了重复的结果,并在查询中添加了 group by