首页 > 解决方案 > JPA CriteriaBuilder 计数返回错误数据

问题描述

我想用来自 AnimalFilter 和 deleteDatetime 的条件来计算我的行数,它总是为空。它返回给我奇怪的值-> 每个birthId 都相似,但它们在我的数据库中是不同的。我究竟做错了什么?

我的代码:

 @Repository
public class AnimalSearchCount {

    @PersistenceContext
    private EntityManager entityManager;

    Long countBy(AnimalFilter filter) {
        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
        CriteriaQuery<Long> cq = cb.createQuery(Long.class);

        Root<Animal> animal = cq.from(Animal.class);

        Predicate deleteDatetimePredicate = cb.isNull(animal.get("deleteDateTime"));

        if (filter.getBirthId() != null) {
            cq.select(cb.count(animal.get("birth").get("id")));
            cq.where(deleteDatetimePredicate);
        }

        return entityManager.createQuery(cq).getSingleResult();
    }
}

标签: javahibernatejpa

解决方案


if (filter.getBirthId() != null) {
     cq.select(cb.count(animal));
     cq.where(
         deleteDatetimePredicate, 
         cb.eq(animal.get("birth").get("id"), filter.getBirthId()));
}

推荐阅读