JPA Predicate ManyToMany with Map

时间:2013-03-15 08:56:08

标签: java jpa

我对java中的Predicates不太熟悉,并试图谷歌找到我的问题的解决方案,所以欢迎任何帮助/提示。

所以这是:

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

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

我如何制作谓词,让所有拥有合作伙伴的实体都能获得结果.B.id = 2?

1 个答案:

答案 0 :(得分: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));

(注:我没有测试此代码)