从表中选择所有行但保持条件不变

时间:2015-09-18 10:37:29

标签: java hibernate jpql

嗨,这段代码因为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

以下是错误的屏幕截图:

screenshot

有人可以帮助我吗?

1 个答案:

答案 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(属性名称是上面的群集)。否则,您的要求将无效。