Java 加入表后结果中的EclipseLink标准API计数
经过我们的搜索,我仍然无法找到在EclipseLink条件查询中编写此SQL等价物的方法: 我尝试了连接、多重选择等。我需要Java 加入表后结果中的EclipseLink标准API计数,java,eclipselink,criteria-api,criteriaquery,Java,Eclipselink,Criteria Api,Criteriaquery,经过我们的搜索,我仍然无法找到在EclipseLink条件查询中编写此SQL等价物的方法: 我尝试了连接、多重选择等。我需要getResultList()在List中返回我List像List[0]-(Preke)preke1,List[1]-(Integer)count1;列表[0]-(Preke)preke2,列表[1]-(整数)count2… 编辑1: CriteriaBuilder cb = EntityManager.getInstance().getCriteriaBuilder();
getResultList()
在List
中返回我List
像List[0]-(Preke)preke1,List[1]-(Integer)count1;列表[0]-(Preke)preke2,列表[1]-(整数)count2…
编辑1:
CriteriaBuilder cb = EntityManager.getInstance().getCriteriaBuilder();
CriteriaQuery criteriaQuery = cb.createQuery(Tuple.class);
Root<Preke> from = criteriaQuery.from(Preke.class);
Expression<Long> count = cb.count(from.get("images"));
criteriaQuery.where(cb.equal(from.get("trash"), true));
criteriaQuery.multiselect(from.alias("preke"), count.alias("count"));
criteriaQuery.groupBy(from.get("prid"));
TypedQuery<Tuple> typedQuery = EntityManager.getInstance().createQuery(criteriaQuery);
typedQuery.setFirstResult(PAGE * ITEMS_PER_PAGE);
typedQuery.setMaxResults(ITEMS_PER_PAGE);
prekes = typedQuery.getResultList();
...
for(Tuple t : prekes) {
Preke p = (Preke)t.get("preke");
long count = (long)t.get("count");
...
}
这几乎可以,但不包括计数为0的结果
正如上面JPQL语句所说-t1.prid=t0.prid
应该是坏的部分,如何替换它?我想我需要的是一个左连接
。但是怎么做呢?而不是使用
Expression<Long> count = cb.count(from.get("images"));
Expression count=cb.count(from.get(“images”);
试用
Join<Preke, Nuotrauka> images = from.join("images", JoinType.LEFT);
Expression<Long> count = cb.count(images);
Join images=from.Join(“images”,JoinType.LEFT);
表达式计数=cb.count(图像);
而不是使用
Expression<Long> count = cb.count(from.get("images"));
Expression count=cb.count(from.get(“images”);
试用
Join<Preke, Nuotrauka> images = from.join("images", JoinType.LEFT);
Expression<Long> count = cb.count(images);
Join images=from.Join(“images”,JoinType.LEFT);
表达式计数=cb.count(图像);
结果不包括计数为0的项目似乎是正确的,因为它们不满足where条件trash=1
。“trash”和“images count”完全不同。trash是preke中的一个字段(可能值为1和0),count是image表中的记录计数,prid是主键。顺便说一句,SQL语句是正确的-它返回所有需要的结果。您可以通过在persistence.xml中设置EclipseLink logging level=FINE来查看结果查询。然而,问题似乎出在您的条件查询中缺少联接。我用JPQL语句更新了一个答案,可能有不好的部分,但我不知道如何修复它。现在我帮不上忙,但您可以使用这些示例了解联接的工作方式:并且结果不包括计数为0的项,这似乎是正确的,因为它们不满足where条件trash=1
。“trash”和“images count”是完全不同的事情。trash是preke中的一个字段(可能值为1和0),count是image表中的记录计数,prid是主键。顺便说一句,SQL语句是正确的-它返回所有需要的结果。您可以通过在persistence.xml中设置EclipseLink logging level=FINE来查看结果查询。然而,问题似乎出在您的条件查询中缺少联接。我用JPQL语句更新了一个答案,可能有不好的部分,但我不知道如何修复它。现在我无能为力,但您可以使用以下示例了解联接的工作方式:和