假设我有一个以下列投影开头的查询:
SELECT t.term as term, count(g.id) as amount
这是原始的sql,我在Hibernate会话对象上使用createSqlQuery。我想做的是将这些投影放在一个具有“term”和“amount”属性的对象中。
使用HQL,我们可以使用“select new ClassName(...)”,但这不适用于原始SQL查询。
我们怎么做?我找回了一堆[LObject的...而且我不知道如何处理它们。如果我可以让Hibernate将它们放入某种非实体值对象中,那就太棒了。
谢谢!
答案 0 :(得分:2)
如果我可以让Hibernate将它们放入某种非实体值对象中,那就太好了。
您可以通过应用“结果转换器”告诉Hibernate从本机SQL查询返回非托管值对象。从参考文档:
16.1.5. Returning non-managed entities
可以申请一个 ResultTransformer到本机SQL 查询,允许它返回 非管理实体。
sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS") .setResultTransformer(Transformers.aliasToBean(CatDTO.class))
此查询指定:
- SQL查询字符串
- 结果转换器
上面的查询将返回一个列表 已经实例化的
CatDTO
并注入NAME
和{的值BIRTHNAME
进入其对应的 属性或字段。
答案 1 :(得分:0)
检查http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html#d0e13696
sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE, DOG_ID FROM CATS").addEntity(Cat.class)
假设您的带有term和amount属性的对象只有那两个对象属性,那么使用您的原始SQL的类似查询应返回这些对象的列表,然后您可以逐个迭代。< / p>