2

假设我有一个以以下预测开头的查询:

SELECT t.term as term, count(g.id) as amount

这是原始 sql,我在 Hibernate 会话对象上使用 createSqlQuery。我想做的是把这些预测放在一个具有“期限”和“数量”属性的对象中。

使用 HQL,我们可以使用“select new ClassName(...)”,但这不适用于原始 SQL 查询。

我们该怎么做呢?我拿回了一堆 [LObject's... 我不知道如何处理它们。如果我能让 Hibernate 将它们放入某种非实体值对象中,那就太好了。

谢谢!

4

2 回答 2

2

如果我能让 Hibernate 将它们放入某种非实体值对象中,那就太好了。

您可以通过应用“结果转换器”告诉 Hibernate 从本机 SQL 查询返回非托管值对象。从参考文档:

16.1.5。返回非托管实体

可以将 ResultTransformer 应用于本机 SQL 查询,允许它返回非托管实体。

sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS")
        .setResultTransformer(Transformers.aliasToBean(CatDTO.class))

此查询指定:

  • SQL 查询字符串
  • 结果转换器

上面的查询将返回一个列表, CatDTO该列表已被实例化并将其值NAME注入 BIRTHNAME其相应的属性或字段。

于 2010-07-06T08:20:29.057 回答
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 属性的对象只有这 2 个对象属性,使用原始 SQL 的类似查询应该返回这些对象的列表,然后您可以一个一个地遍历这些对象。

于 2010-07-06T03:03:56.793 回答