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

ご覧のとおり、2 番目のグループの後に a が続き、COMMA 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.29していますHIBERNATE 4.2.3

誰かがヒントをくれることを願っています。

よろしくお願いします..

4

1 に答える 1

0

Hibernate はCriteria APIのhaving句をサポートしていません。あなたのコードはあなたが望む SQL に近いものですが、実際に指定したのは条件による別のグループ、つまりコンマです。これはずっと前からの機能リクエストです: https://hibernate.atlassian.net/browse/HHH-1043 .

基準を使用する必要がある場合は、遅くなるサブクエリを使用できます。HQL はこの句をサポートしているので、そのようにすることができます。

詳細な説明と例: Hibernate Criteria API - HAVING 句の回避策

于 2013-10-04T23:38:11.313 に答える