标准 API 和独特的结果

Criteria API and unique results

下一个代码结果包含 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.

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

在此处查看一些示例: How to add Distinct in Hibernate Criteria

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

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

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