hibernate SQLquery提取变量

如何从hibernate SQL查询中提取变量total,min,max并将它们分配给java变量?

(select count(*) as total, min(price) as min, max(price) as max from product).addScalar("total", Hibernate.INTEGER).addScalar("min", Hibernate.INTEGER).addScalar("max", Hibernate.INTEGER); 

这篇文章应该对你有帮助。

稍后编辑:

 String sQuery = "select min(myEntity.x), max(myEntity.y) from MyEntity myEntity"; Query hQuery = session.createQuery(sQuery); List result = hQuery.list(); Iterator iterator = result.iterator(); while (iterator.hasNext()) { Object[] row = (Object[])iterator.next(); for (int col = 0; col < row.length; col++) { System.out.println(row[col]); } } 

标量查询返回一个Object数组ListObject[] ) – 或者在您的情况下返回一个Object[]

但是,可以使用ResultTransformer返回非托管实体 。 引用Hibernate 3.2:HQL和SQL的变形金刚博客文章:

SQL变形金刚

使用本机sql返回非实体bean或Map通常更有用,而不是基本的Object[] 。 现在可以使用结果变换器。

 List resultWithAliasedBean = s.createSQLQuery( "SELECT st.name as studentName, co.description as courseDescription " + "FROM Enrolment e " + "INNER JOIN Student st on e.studentId=st.studentId " + "INNER JOIN Course co on e.courseCode=co.courseCode") .addScalar("studentName") .addScalar("courseDescription") .setResultTransformer( Transformers.aliasToBean(StudentDTO.class)) .list(); StudentDTO dto =(StudentDTO) resultWithAliasedBean.get(0); 

提示:HSQLDB上需要addScalar()调用以使其与属性名称匹配,因为它以全部大写forms返回列名(例如“STUDENTNAME”)。 这也可以通过搜索属性名称而不是使用完全匹配的自定义转换器来解决 – 也许我们应该提供fuzzyAliasToBean()方法;)

也可以看看

  • 16.1.5。 返回非托管实体