【发布时间】:2016-07-22 00:35:56
【问题描述】:
先对不起我的英语。
我想使用 jpa 来分组,例如:从数据流组中选择 scrip、dustup、count(*) by scrip、dstip。 所以,写下这些代码:
public class DataflowSpec {
public static Specification<Dataflow> search(final String[] group, final String[] sort, final String[] desc) {
return new Specification<Dataflow>() {
@Override
public Predicate toPredicate(Root<Dataflow> root1, CriteriaQuery<?> query1, CriteriaBuilder builder) {
// TODO Auto-generated method stub
CriteriaQuery<Tuple> query = builder.createQuery(Tuple.class);
Root<Dataflow> root = query.from(Dataflow.class);
query.multiselect(root.get("srcip"), root.get("dstip"), builder.count(root));
query.groupBy(root.get("srcip"), root.get("dstip"));
query.orderBy(builder.desc(root.get("srcip").as(BigInteger.class)));
return query.getRestriction();
}
};
}
}
但是,SQL 日志是: 休眠:
select
count(dataflow0_.id) as col_0_0_
from
Dataflow dataflow0_
休眠:
select
dataflow0_.id as id1_2_,
dataflow0_.byteall as byteall2_2_,
dataflow0_.bytedn as bytedn3_2_,
dataflow0_.byteup as byteup4_2_,
dataflow0_.dstip as dstip5_2_,
dataflow0_.dstport as dstport6_2_,
dataflow0_.engieid as engieid7_2_,
dataflow0_.flag as flag8_2_,
dataflow0_.netid as netid9_2_,
dataflow0_.pkgall as pkgall10_2_,
dataflow0_.pkgdn as pkgdn11_2_,
dataflow0_.pkgup as pkgup12_2_,
dataflow0_.protocolid as protoco17_2_,
dataflow0_.rtt as rtt13_2_,
dataflow0_.srcip as srcip14_2_,
dataflow0_.srcport as srcport15_2_,
dataflow0_.updatetime as updatet16_2_
from
Dataflow dataflow0_ limit ?
那么,如何解决呢?谢谢!
【问题讨论】:
-
你用 JPQL 试过了吗?
-
所以你将 WHERE 子句的谓词返回(到某处)...... SELECT 子句部分会发生什么?
-
不,我只想使用规范。
-
斯托克顿。我希望 SELECT 使用两个字段:srcip、dstip。但它返回所有字段。