标准 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
字段。
下一个代码结果包含 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
字段。