'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