下一个代码会显示所有行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。
答案 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