如何从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);
答案 0 :(得分:7)
This帖子可以帮到你。
稍后编辑:
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]);
}
}
答案 1 :(得分:0)
标量查询会返回List
个Object
数组(Object[]
) - 或者单个Object[]
。
然而,可以使用ResultTransformer
返回非托管实体。引用Hibernate 3.2: Transformers for HQL and SQL博文:
SQL Transformers
使用本机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);
提示:
addScalar()
来电是 HSQLDB上需要使其匹配a 属性名称,因为它返回列 全部大写的名称(例如 “学生姓名”)。这也可能是 解决了定制变压器 搜索属性名称而不是 使用完全匹配 - 也许我们应该 提供fuzzyAliasToBean()
方法 ;)