Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用CriteriaBuilder的JPA计数(*)_Java_Hibernate_Jpa_Criteria Api - Fatal编程技术网

Java 使用CriteriaBuilder的JPA计数(*)

Java 使用CriteriaBuilder的JPA计数(*),java,hibernate,jpa,criteria-api,Java,Hibernate,Jpa,Criteria Api,我有一个关于CriteriaBuilderAPI的问题。我是JPA新手,我想创建一个计数*一个标准构建者认为。我需要创建的计数需要使用我在这个动态查询中使用的参数,即我创建的参数 我有这个服务来创建动态查询,但我不知道如何使用相同的参数创建count* package com.sanmina.rohsappapirest.model.services.imp; /** * @author edgar_conrado on 07/07/2020 * */ @Service public

我有一个关于CriteriaBuilderAPI的问题。我是JPA新手,我想创建一个计数*一个标准构建者认为。我需要创建的计数需要使用我在这个动态查询中使用的参数,即我创建的参数

我有这个服务来创建动态查询,但我不知道如何使用相同的参数创建count*

package com.sanmina.rohsappapirest.model.services.imp;


/**
 * @author edgar_conrado on 07/07/2020
 *
 */
@Service
public class ItemFilterServiceImp implements IItemFilterService {

    @Autowired
    private IItemFilterDao itemFilterDao;

    
    /**
     * This function to get the items providing parameters
     * 
     * @param manufacturers     Array with the manufacturer to found
     * @param mpnReachs         Array with the mpnReachs to found
     *  
     * @return List with the items
     */
    @Override
    @Transactional(readOnly = true)
    public List<ItemFilter> findByInManufacturer(String[] manufacturers, String[] mpnReachs) {      
        return itemFilterDao.findAll(new Specification<ItemFilter>() {

            /**
             * 
             */
            private static final long serialVersionUID = 1L;

            @Override
            public Predicate toPredicate(Root<ItemFilter> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {          
                List<Predicate> predicates = new ArrayList<>();
                
                // Criteria for Manufacturer
                if (manufacturers!=null) {                  
                    // Convert the array in a List
                    List<String> manufacturerList = new ArrayList<String>();
                    for (String l : manufacturers) {
                        manufacturerList.add(l);
                    }

                    //Create the query
                    In<String> predicate = criteriaBuilder.in(root.get("manufacturer"));                                        
                    manufacturerList.forEach(t -> predicate.value(t));  

                    predicates.add(predicate);
                    //predicates.add(criteriaBuilder.and(criteriaBuilder.in(root.get("manufacturer"))));                    
                }
                
                // Criteria for Reach
                if (mpnReachs!=null) {                  
                    // Convert the array in a List
                    List<String> reachList = new ArrayList<String>();
                    for (String l : mpnReachs) {
                        reachList.add(l);
                    }

                    //Create the query
                    In<String> predicate = criteriaBuilder.in(root.get("mpnReach"));                                        
                    reachList.forEach(t -> predicate.value(t));                 
                    predicates.add(predicate);                  
                }
                                        
                return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
            }

        });
    }
        
}
有什么建议吗?

使用此代码

CriteriaBuilder qb = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> cq = qb.createQuery(Long.class);
cq.select(qb.count(cq.from(MyEntity.class)));
cq.where(/*your stuff*/);
return entityManager.createQuery(cq).getSingleResult();
使用此代码

CriteriaBuilder qb = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> cq = qb.createQuery(Long.class);
cq.select(qb.count(cq.from(MyEntity.class)));
cq.where(/*your stuff*/);
return entityManager.createQuery(cq).getSingleResult();

query.selectcriteriaBuilder.countroot.where yourPredicate query.selectcriteriaBuilder.countroot.where yourPredicate