2013-03-15 70 views
2

我不是很熟悉Java中的Predicates,并试图谷歌周围找到解决我的问题,所以任何帮助/提示是值得欢迎的。JPA Predate ManyToMany与地图

所以在这里,它是:

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

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

我怎么到处做一个谓词,给我一个结果,与具有合作伙伴的所有实体。 B.id = 2?

回答

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

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