2016-03-26 8 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状態真実であり、ユーザーごとに1つだけのようなレコードを検討したい行数を取得したいと思います。もしそうなら、あなたは試すことができます:

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

注:はあなたのResultTableエンティティにuserIdフィールドとしてマッピングされているuser_idを仮定します。

+0

@rozerroさらに簡単にすることができます。答えを更新しました。試してみてください。 –

関連する問題