hibernate SQLquery提取变量

时间:2010-08-08 18:48:53

标签: java hibernate orm

如何从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);

2 个答案:

答案 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)

标量查询会返回ListObject数组(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()方法   ;)

另见