'How to count number of rows using JPA?
I try to count number of rows using JPA.I want to use where clause however I can't.
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();
How can I set where clause forexample where age="45". Thanks in advance.
Solution 1:[1]
The best and simple way in jpa :
public interface YourEntityRepository extends JpaRepository<YourEntity, Serializable> {
Long countByAgeGreaterThan(Integer age);
}
Solution 2:[2]
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();
Solution 3:[3]
If you use EntityManager.createQuery() instead of the CriteriaBuilder it looks like this:
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();
Solution 4:[4]
you can use the Query parameter, Example :
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);
}
it's useful for you?
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | jdominus |
| Solution 2 | RichardK |
| Solution 3 | Yay295 |
| Solution 4 | TinyOS |
