为什么JPA中的multiselect方法不起作用 [英] Why the multiselect method in JPA does not work

查看:1850
本文介绍了为什么JPA中的multiselect方法不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从用户表中选择三个属性,但是它返回用户的所有属性.我使用了以下代码:

I want to select three attributes from users table, but it returns all the attributes of users.The following code I used:

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


我在等你的建议.


I am waiting for your advice.

推荐答案

我遇到了此类问题,multiselect也不起作用,换一种方式可以:

I have encountered such problems, multiselect also does not work, for another way 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"));

这篇关于为什么JPA中的multiselect方法不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆