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

JPQL查询含嵌入式对象列表的实体报错,求正确写法

解决嵌入式字段的JPQL IN查询问题

直接修正你的自定义JPQL查询,将WHERE条件中的=替换为IN即可:

@Query("select p " +
        "from Person p " +
        "left join fetch p.status status " +
        "where p.identifier IN :identifiers")
List<Person> findByIdentifierIn(@Param("identifiers") List<Identifier> identifiers);

错误原因说明

你之前的写法p.identifier = :identifiers仅能适配单元素列表场景(此时JPA会自动将列表中的单个对象作为匹配项),但传入多元素列表时,=运算符无法处理集合类型参数,再加上嵌入式字段是多列组成的复合结构,会导致参数绑定过程中出现列索引不匹配的错误。

改用IN :identifiers后,JPA会正确解析嵌入式字段的所有属性列,生成与Spring Data JPA自动生成方法一致的SQL——即把每个Identifier对象拆解为对应的多列组合,用(列1,列2,列3) IN ((值1,值2,值3), (值4,值5,值6))的格式完成匹配,从而支持多元素列表的查询需求。

内容的提问来源于stack exchange,提问作者Jarosław Wojciechowski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:33:15