Java 如何使用Hibernate将原始sql投影放入对象中?

Java 如何使用Hibernate将原始sql投影放入对象中?,java,sql,hibernate,orm,projection,Java,Sql,Hibernate,Orm,Projection,假设我有一个以以下预测开始的查询: SELECT t.term as term, count(g.id) as amount 这是原始sql,我在Hibernate会话对象上使用createSqlQuery。我想做的是将这些投影放在一个具有“术语”和“数量”属性的对象中 对于HQL,我们可以使用“选择新类名(…)”,但这不适用于原始SQL查询 我们怎么做?我得到了一堆[LObject],我不知道该怎么处理它们。如果我能让Hibernate把它们放到某种非实体值对象中,那就太好了 谢谢!检查 假

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

SELECT t.term as term, count(g.id) as amount
这是原始sql,我在Hibernate会话对象上使用createSqlQuery。我想做的是将这些投影放在一个具有“术语”和“数量”属性的对象中

对于HQL,我们可以使用“选择新类名(…)”,但这不适用于原始SQL查询

我们怎么做?我得到了一堆[LObject],我不知道该怎么处理它们。如果我能让Hibernate把它们放到某种非实体值对象中,那就太好了

谢谢!

检查

假设具有term和amount属性的对象只有这两个对象属性,则使用原始SQL的类似查询应返回这些对象的列表,然后您可以逐个迭代这些对象

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

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

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

sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS")
        .setResultTransformer(Transformers.aliasToBean(CatDTO.class))
此查询指定:

  • SQL查询字符串
  • 结果转换器
上面的查询将返回一个
CatDTO
已实例化 并注入
NAME
出生名
转换为相应的 属性或字段

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