2

我对 Java 中的谓词不是很熟悉,并试图用谷歌搜索来解决我的问题,所以欢迎任何帮助/提示。

所以这里是:

在我的实体模型中,我有以下映射

public class Entity{
    @ManyToMany
    @MapKeyEnumerated(STRING)
    private Map<A, B> partners = new HashMap<A, B>();
}

我如何去做一个谓词,给我一个结果,所有实体都有 partners.B.id = 2 ?

4

1 回答 1

1

您可以在构建谓词时使用连接来执行此操作。

对于您的示例,它可能如下所示:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery();
Root<entity> root = cq.from(Entity.class);
MapJoin<Entity, A, B> mapJoin = root.joinMap("partners");

Predicate predicate = cb.equal(mapJoin.get("id"), 2);

em.createQuery(cq.select(root).distinct(true).where(predicate));

(备注:我没有测试这个代码)

于 2015-12-22T10:52:15.110 回答