Criteria API和独特的结果

时间:2016-03-26 16:55:59

标签: java hibernate hibernate-criteria

下一个代码会显示所有行ispassed=true

Criteria crit = hSession.createCriteria(ResultTable.class);
crit.add( Restrictions.eq("ispassed", true));
crit.setProjection(Projections.rowCount());
total = (long) crit.uniqueResult();

但是' ResultTable' table还包含user_id列,可以有以下行:

-ispassed              -user_id
true                    1
true                    1
true                    2
true                    3
true                    4

那么我怎样才能获得user_id唯一的行? 所以结果必须是4。

2 个答案:

答案 0 :(得分:1)

我认为您希望获得isPassed状态为true的行数,并且每个用户只想考虑一条此类记录。如果是这样,你可以尝试:

Criteria crit = hSession.createCriteria(ResultTable.class);
crit.add( Restrictions.eq("ispassed", true));
crit.setProjection(Projections.groupProperty("userId"));
total = crit.list().size();

注意:假设user_id已在userId实体中映射为ResultTable字段。

答案 1 :(得分:0)

Projections.distinct()应该只获得不同的组合。

在这里查看一些例子: How to add Distinct in Hibernate Criteria