Java 加入表后结果中的EclipseLink标准API计数

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();

经过我们的搜索,我仍然无法找到在EclipseLink条件查询中编写此SQL等价物的方法:

我尝试了连接、多重选择等。我需要
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语句更新了一个答案,可能有不好的部分,但我不知道如何修复它。现在我无能为力,但您可以使用以下示例了解联接的工作方式:和