如何使用 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();
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();
我尝试使用 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();
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();