嗨,这段代码因为GroupBy而只给我1行:
@Override
public Map<Integer, List<Cluster>> getPartnerIdClusterMap(boolean minorOnly, boolean foreignCountriesOnly) {
BooleanBuilder predicate = new BooleanBuilder();
if (minorOnly) {
predicate.and(qCluster.type.eq(ClusterType.MINOR));
}
if (foreignCountriesOnly) {
predicate.and(qPartner.country.code2.ne("nl"));
}
return from(qCluster)
.innerJoin(qCluster.partner, qPartner)
.where(predicate)
.where(qPartner.country.code2.ne("nl"))
.map(qPartner.id, GroupBy.list(qCluster));
}
这是我很乐意知道的:
我想选择Cluster表的所有行。但我希望保持这些条件(innerJoin,where clause等)完整。
所以我试过这个:
return (Map<Integer, List<Cluster>>) from(qCluster)
.innerJoin(qCluster.partner, qPartner)
.where(predicate)
.where(qPartner.country.code2.ne("nl"));
说实话,Netbeans为我提供了从JPQLQuery到Map类型的上述代码。但不幸的是,代码并不起作用。因为我收到以下错误:
HTTP Status 500 - Request processing failed; nested exception is java.lang.ClassCastException: com.mysema.query.jpa.impl.JPAQuery cannot be cast to java.util.Map
以下是错误的屏幕截图:
有人可以帮助我吗?
答案 0 :(得分:0)
如果您使合作伙伴和群集具有一对多或多对多关系,这应该适合您:
return from(qCluster)
.innerJoin(qCluster.partner, qPartner)
.where(predicate)
.where(qPartner.country.code2.ne("nl"))
.map(qPartner.id, qPartner.clusters);
我相信List<Cluster>
中有Partner
(属性名称是上面的群集)。否则,您的要求将无效。