2015-03-04 4 views
-1

Я хочу, чтобы выбрать три атрибута из таблицы пользователей, но он возвращает все атрибуты users.The следующего кода я использовал:Почему множественный метод в JPA не работает


Specification<Users> spec = new Specification<Users>() { 

      @Override 
      public Predicate toPredicate(Root<Users> root, CriteriaQuery<?> query, 
        CriteriaBuilder cb) { 
       // TODO Auto-generated method stub 
       List<Predicate> ps = new ArrayList<Predicate>(); 
       ps.add(cb.equal(root.<String>get("userName"), userName)); 

       List<Selection<?>> selections = new ArrayList<Selection<?>>(); 
       selections.add(root.get("id")); 
       selections.add(root.get("birth")); 
       selections.add(root.get("userName")); 
       query.multiselect(selections); 

       query.where(ps.toArray(new Predicate[ps.size()])); 
       return query.getRestriction(); 
      } 
     }; 
     return repository.findOne(spec); 

Я жду вашего совета.

ответ

0

Я сталкивался с такими проблемами, MultiSelect также не работает, по-другому OK:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();   
    CriteriaQuery<Tuple> cq = cb.createTupleQuery();  
    Root<AccountFlowInfoEntity> root = cq.from(AccountFlowInfoEntity.class); 

    List<Expression<?>> grouping = new ArrayList<Expression<?>>(); 
    grouping.add(root.get("tradeDate")); 
    grouping.add(root.get("tradeType")); 
    cq.multiselect(root.get("tradeDate"), 
        root.get("tradeType"), 
        cb.sum(root<BigDecimal> get("tradeAmount")) 
        ); 

    Predicate p = cb.conjunction(); 
    if (!StringUtils.isEmpty(root.get("custId"))) 
    p=cb.and(p,cb.equal(root<String>get("custId"),paramsMap.get("custId"))); 

    cq.where(p); 
    cq.groupBy(grouping).orderBy(cb.asc(root.get("id"))); 
    Query query = entityManager.createQuery(cq). 
setFirstResult((int)paramsMap.get("pageNum")).setMaxResults((int)paramsMap.get("pageSize")); 
+1

В будущем, пожалуйста, включите перевод на английский язык, если это необходимо. –

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