2014-09-24 21 views
0

我正在構建Spring Web應用程序,我是JPA的新手,我需要獲取數據庫中特定組中的用戶數。在OneToMany關係中選擇使用條件生成器計數

下面是示例代碼:

public long countAllUsersByGroup(int groupId) { 
    CriteriaBuilder qb = em.getCriteriaBuilder(); 
    CriteriaQuery<Long> cq = qb.createQuery(Long.class); 
    cq.select(qb.count(cq.from(User.class))); 
    //cq.where(qb.equal(cq.from(User.class).get("userGroup").get("id"),groupId)); 
    return em.createQuery(cq).getSingleResult(); 
} 

此代碼的工作,它讓我找回我在這是非常瑣碎的數據庫用戶的數量。

這是我的用戶型號:

public class User { 
    private String userFirstName; 
    private String userLastName; 
    /* some stuff */ 
    @ManyToOne 
    private Group userGroup; 
    } 

我的組模型註解爲@Id和命名id一個int屬性。在這種情況下,如何通過組ID分配用戶的數量?

PS:我已經試過在上面的代碼評論我的嘗試,可惜失敗了......

回答

1

你可以試試下面

CriteriaBuilder cb = em.getCriteriaBuilder(); 

    CriteriaQuery<Long> q = cb.createQuery(Long.class); 

    ParameterExpression<Integer> p = cb.parameter(Integer.class); 
    q.select(q.count(q.from(User.class))).where(cb.gt(c.get("userGroup"), someId)); 
+0

代碼的方法計數(根)未定義類型CriteriaQuery ...我做錯了什麼? – TheByeByeMan 2014-09-25 07:56:15

+0

並且不使用ParameterExpression?那麼目的是什麼? – TheByeByeMan 2014-09-25 08:05:33

+0

你從哪裏來的變量「C」! – TheByeByeMan 2014-09-25 08:08:19