我对 Java 中的谓词不是很熟悉,并试图用谷歌搜索来解决我的问题,所以欢迎任何帮助/提示。
所以这里是:
在我的实体模型中,我有以下映射
public class Entity{
@ManyToMany
@MapKeyEnumerated(STRING)
private Map<A, B> partners = new HashMap<A, B>();
}
我如何去做一个谓词,给我一个结果,所有实体都有 partners.B.id = 2 ?
您可以在构建谓词时使用连接来执行此操作。
对于您的示例,它可能如下所示:
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));
(备注:我没有测试这个代码)