2013-03-15 76 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)); 

(注:我沒有測試此代碼)