JPA Criteria Query distinct
Posted
技术标签:
【中文标题】JPA Criteria Query distinct【英文标题】: 【发布时间】:2012-09-07 21:07:58 【问题描述】:我正在尝试编写一个不同的条件查询,使用:
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<RuleVar> query = builder.createQuery(RuleVar.class);
Root<RuleVar> ruleVariableRoot = query.from(RuleVar.class);
query.select(ruleVariableRoot.get("foo").<String>get("foo")).distinct(true);
基于 CriteriaQuery.select() 的 javadoc 中的示例
CriteriaQuery<String> q = cb.createQuery(String.class);
Root<Order> order = q.from(Order.class);
q.select(order.get("shippingAddress").<String>get("state"));
但是,这给了我一个错误:
The method select(Selection<? extends RuleVar>) in the type CriteriaQuery<RuleVar> is not applicable for the arguments (Path<String>)
有人可以指出我做错了什么吗?或者如何从 Path 中获取 Selection 对象?
【问题讨论】:
【参考方案1】:我明白了。问题是我的 CriteraQuery 需要是字符串类型。这有效:
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<String> query = builder.createQuery(String.class);
Root<RuleVar> ruleVariableRoot = query.from(RuleVar.class);
query.select(ruleVariableRoot.get(RuleVar_.varType)).distinct(true);
【讨论】:
以上是关于JPA Criteria Query distinct的主要内容,如果未能解决你的问题,请参考以下文章
如何在JPA Criteria查询API中编写自定义查询作为根?