如何使用JPA计算行数?

12

我尝试使用JPA来计算行数。我想要使用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"。

谢谢提前。

请看这里,ergul:[http://www.objectdb.com/java/jpa/query/criteria] - Ankur Singhal
1
你选用的JPA实现文档中关于如何使用Criteria进行WHERE子句操作有什么说明?你并没有说明为什么你“不能”,或者你尝试了什么。 - Neil Stockton
5个回答

20

JPA 的最佳且简单的方式:

public interface YourEntityRepository extends JpaRepository<YourEntity, Serializable> {

Long countByAgeGreaterThan(Integer age);

}

13

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

参考资料.


1
是的,因为您正在运行“CriteriaQuery” cq,所以应该这样。我只是拿了您的示例源代码并添加了“ParameterExpression”。 - Buhake Sindi

5
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

如果您使用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();

-2

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

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

这对你有用吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接