在OneToMany关系中选择“使用条件构建”构建

时间:2014-09-24 12:51:22

标签: spring hibernate jpa orm entitymanager

我正在构建一个Spring Web应用程序,而且我是JPA的新手,我需要获取数据库中特定组的用户数。

以下是示例代码:

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注释的int属性,名为id。在这种情况下,如何获取用户组ID?

P.S:我在上面的代码中试过并评论了我的尝试,不幸的是它失败了......

1 个答案:

答案 0 :(得分: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));