You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JPA Criteria API查询Book实体的Set<People>是否包含指定人员

正确的Criteria查询实现

你需要先对多对多集合属性peoples执行join操作,再拼接匹配条件,完整示例如下:

// Spring环境下可直接@Autowired注入EntityManager
@Autowired
private EntityManager entityManager;

public List<Book> listBooksReadByPeopleId(Long peopleId) {
    CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    CriteriaQuery<Book> cq = cb.createQuery(Book.class);
    Root<Book> bookRoot = cq.from(Book.class);

    // 对Book的peoples集合属性做内连接,关联到People实体
    Join<Book, People> peopleJoin = bookRoot.join("peoples");

    // 匹配关联的PeopleID等于传入的指定ID
    cq.where(cb.equal(peopleJoin.get("id"), peopleId));

    return entityManager.createQuery(cq).getResultList();
}

如果已经持有People实体实例,不需要单独传ID的话,条件可以简化为:

cq.where(cb.equal(peopleJoin, targetPeopleInstance));

原写法问题说明

你之前直接用root.get("peoples")拿到的是集合类型的属性路径,无法直接读取集合内部元素的属性,必须通过join操作把集合打平为单条关联记录后,才能对People的属性做匹配。

内容的提问来源于stack exchange,提问作者Spring soup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:54:03