2016-03-26 40 views
0

包含所有行的下一个代码结果,其中ispassed=true标准API和独特的结果

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.

回答

1

我想你想获得其行状态isPassed是真实的数量,要考虑每个用户只有一个这样的记录。如果是的话,你可以尝试:

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

注:假设user_idResultTable实体被映射为userId场。

+0

@rozerro我们可以进一步简化它。更新了答案。你可能想尝试一下。 –