下一条代码将显示所有行,其中ispassed=true

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


但是“ ResultTable”表还包含user_id列,并且可能存在以下行:

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


那么,如何仅获得user_id是唯一的行?
因此结果必须为4。

最佳答案

我认为您想获取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字段。

10-07 23:49