0

我需要把它翻译SQL expressionHibernate使用Criteria

select id,field1,field2,count(*) from my_table 
group by field1,field2 having count(*)>1;

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

    final Session session = ......
    ProjectionList projectionList = (ProjectionList)emptyProjection();
    projectionList.add(Projections.property("id"),"id"); 
    projectionList.add(Projections.groupProperty("codeI"));
    projectionList.add(Projections.groupProperty("codeII"));
    projectionList.add(Projections.sqlGroupProjection("count(*)","having count(*)>1",new String[]{},new Type[]{StandardBasicTypes.INTEGER}));     
    final Criteria criteria = session.createCriteria(MyClass.class).setProjection(projectionList).setResultTransformer(transformer(MyClass.class));
    return new ArrayList<MyClass>(criteria.list());    

我的问题是

标准正在生成此 SQL。

group by
    this_.FIELD1,
    this_.FIELD2,

having
    count(*)>1

如您所见,第二组 by 后面是 aCOMMA this_.FIELD2,并且 mySQL 正在抛出SyntaxError

更新

这是我的hibernate.cfg

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

我们正在使用mysql 5.5.29HIBERNATE 4.2.3

我希望有人给小费。

此致..

4

1 回答 1

0

Hibernate 不支持 Criteria API 中的having子句。您的代码非常接近您想要的 SQL,但您实际指定的只是另一个条件分组,因此是逗号。这是很久以前的功能请求:https ://hibernate.atlassian.net/browse/HHH-1043 。

如果您必须使用条件,那么您可以使用最终会变慢的子查询。HQL 确实支持该子句,因此您可以这样做。

更多讨论和示例:Hibernate Criteria API - HAVING 子句 workarounds

于 2013-10-04T23:38:11.313 回答