Java 使用CriteriaBuilder的JPA计数(*)。如何使用CriteriaBuilder检索计数(*)列
我对CriteriaBuilder API有一个问题: 我想对一列的结果进行计数,并返回该计数的结果和该列的不同值列表Java 使用CriteriaBuilder的JPA计数(*)。如何使用CriteriaBuilder检索计数(*)列,java,jpa,orm,criteria,criteriaquery,Java,Jpa,Orm,Criteria,Criteriaquery,我对CriteriaBuilder API有一个问题: 我想对一列的结果进行计数,并返回该计数的结果和该列的不同值列表 |桌上水果|计数(桌上水果)| |------------------------|---------------------------| |苹果(5)| |橙色|(20)| |香蕉|(400)| 因此,我想进行一个查询,该查询将执行以下SQL语句: select distinct COLUMN_NAME_1, count(COLUMN_NAME_1) from TABLE
|桌上水果|计数(桌上水果)|
|------------------------|---------------------------|
|苹果(5)|
|橙色|(20)|
|香蕉|(400)|
因此,我想进行一个查询,该查询将执行以下SQL语句:
select distinct COLUMN_NAME_1, count(COLUMN_NAME_1)
from TABLE_NAME
where COLUMN_NAME_2= 'value'
group by COLUMN_NAME_1;
CriteriaBuilder cb=getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(Fruit.class);
根=cq.from(果类);
列表谓词=新的ArrayList();
add(cb.equal(root.get(“COLUMN_NAME_2”),value));
cq.where(predicates.toArray(新谓词[predicates.size()]);
//如何从此处的表格中选择计数(*)?
cq.select(root.get(“COLUMN\u NAME\u 1”)).distinct(true);
groupBy(root.get(“COLUMN_NAME_1”);
因此,我的问题是:如何在Java中从查询中检索这两个值1)将泛型更改为:CriteriaQuery cq=cb.createQuery(Object[])代码>
2)更改选择:cq.select(cb.count(root)、root.get(“COLUMN\u NAME\u 1”)
3)迭代结果列表:
List<Object[]> results = em.createQuery(cq).getResultList();
for (Object[] result : results) {
// actions
}
List results=em.createQuery(cq.getResultList();
对于(对象[]结果:结果){
//行动
}
试试这个
cq.multiselect(root.get("COLUMN_NAME_1"), cb.count(root.get("COLUMN_NAME_1"));
// add your predicates here
cq.groupBy(root.get("COLUMN_NAME_1"));