将sql count聚合函数转换为hibernate条件

时间:2014-07-17 19:40:08

标签: java sql hibernate criteria

我有以下sql查询,我试图转换为hibernate查找:

select column_1, column_2, count(*)
from data_table
group by column_1, column_2
order by column_1, column_2
;

到目前为止,这是我的代码:

 DetachedCriteria detachedCriteria = DetachedCriteria.forClass(table.class);
 detachedCriteria.setProjection(Projections.projectionList()
            .add(Projections.groupProperty("column_1"))
            .add(Projections.groupProperty("column_2"))
            .add(Projections.rowCount()))
        .addOrder(Order.asc("column_1"))
        .addOrder(Order.asc("column_2"));

出于某种原因,我收到以下错误: ORA-00979:不是GROUP BY表达式

这是使用hibernate翻译sql查询的正确方法吗?如果没有,那将是一个更好的方式

我也在尝试将返回的count列映射到模型对象中的transient属性。实现这一目标的好方法是什么?

由于

1 个答案:

答案 0 :(得分:0)

我能够使用以下代码实现我想要的东西:

     detachedCriteria.setProjection(Projections.projectionList()
            .add(Projections.groupProperty("column_1"))
            .add(Projections.groupProperty("column_2"))
            .add(Projections.sqlProjection( 
                    "count(*) as counter", 
                    new String[] { "counterproperty" }, 
                    new Type[] { Hibernate.LONG } 
                  )))
              .addOrder(Order.asc("column_1"))
              .addOrder(Order.asc("column_2")); 

               detachedCriteria.setResultTransformer(Transformers.aliasToBean(modelObject.class));

counterProperty是我添加到模型对象的瞬态属性