我需要使用SQL expression
Hibernate
翻译为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
正如您所看到的第二个分组后面跟着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
我希望有人给小费。
最好的问候..
答案 0 :(得分:0)
Hibernate不支持Criteria API中的具有子句。你的代码很接近你想要的SQL,但你实际指定的只是另一个组条件,因此是逗号。以下是来自永久前的功能请求:https://hibernate.atlassian.net/browse/HHH-1043。
如果必须使用标准,则可以使用最终会变慢的子查询。 HQL确实支持该子句,因此您可以这样做。
更多讨论和示例:Hibernate Criteria API - HAVING clause work arounds。