如何使用 JPA 计算行数?

How to count number of rows using JPA?

我尝试使用 JPA.I 想使用 where 子句来计算行数 但是我不能。

CriteriaBuilder qb = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> cq = qb.createQuery(Long.class);
cq.select(qb.count(cq.from(MyEntity.class)));
cq.where();  //how to write where clause 
return entityManager.createQuery(cq).getSingleResult();

我如何设置 where 子句,例如 where age="45"。 提前致谢。

使用ParameterExpression。注:未测试.

CriteriaBuilder qb = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> cq = qb.createQuery(Long.class);
cq.select(qb.count(cq.from(MyEntity.class)));
ParameterExpression<Integer> p = qb.parameter(Integer.class);
q.where(qb.eq(c.get("age"), 45));
return entityManager.createQuery(cq).getSingleResult();

Reference.

EntityManagerFactory emf =
                    Persistence.createEntityManagerFactory("your table name");
            EntityManager em = emf.createEntityManager();


            // JPA Query Language is executed on your entities (Java Classess), not on your database tables;

            Query query = em.createQuery("SELECT count(*) FROM your Classname WHERE ... etc");
            long count = (long) query.getSingleResult();

您可以使用查询参数, 示例:

StringBuilder strQuery ;
    strQuery= new StringBuilder();
    try {
        strQuery.append("FROM SSS s where s.age:age");
        Query query = this.getEntityManager().createQuery(
                strQuery.toString());
        query.setParameter("age", 45);
    } catch (Exception e) {
        LOGGER.info("Erreur", e);
    }

对你有用吗?

jpa 中最好最简单的方法:

public interface YourEntityRepository extends JpaRepository<YourEntity, Serializable> {

Long countByAgeGreaterThan(Integer age);

}

如果您使用 EntityManager.createQuery() 而不是 CriteriaBuilder,它看起来像这样:

final TypedQuery<Number> query = em.createQuery("SELECT COUNT(e) FROM MyEntity e WHERE e.age = :age", Number.class);
query.setParameter("age",45);
final long count = query.getSingleResult().longValue();