2015-01-29 2 views
1

Я пытаюсь подсчитать количество строк, используя JPA. Я хочу использовать, где статья , однако я не могу.Как подсчитать количество строк, используя JPA?

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(); 

Как установить, где предложение используется для примера, где age = "45". Спасибо заранее.

+0

ergul посмотреть [здесь] (http://www.objectdb.com/java/jpa/query/criteria) –

+1

И что говорится в документации вашей выбранной реализации JPA о том, как выполнять предложение WHERE критериев ? Вы не говорите, почему вы «не можете», или то, что вы пробовали –

ответ

7

Использование ParameterExpression. Примечание: Untested.

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.

+0

, он возвращается долго? –

+1

Да, это должно быть так, как вы используете 'CriteriaQuery'' cq'. Я просто взял ваш образец исходного кода и добавил 'ParameterExpression'. –

+1

это хорошее решение. –

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(); 
+0

Это должно быть: SELECT count (a) FROM MyClass a WHERE ... – Andre

0

вы можете использовать параметр запроса, Пример:

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); 
    } 

это полезно для вас?

Смежные вопросы