为什么JPA中的multiselect方法不起作用 [英] Why the multiselect method in JPA does not work
本文介绍了为什么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屋!
查看全文