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

Spring Data JPA查询方法报错:Integer与Boolean类型不匹配求助

Spring Data JPA查询方法类型不匹配报错解决

你在Spring Data JPA中定义了如下查询方法:

List<AspectEs> findAllByProcessedIsTrueAndNatalIsOrSolarIs
            (Boolean processed, Integer natal, Integer solar);

运行时触发如下错误:

Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List com.mysticriver.repository.AspectEsRepository.findAllByProcessedIsTrueAndNatalIsOrSolarIs(java.lang.Boolean,java.lang.Integer,java.lang.Integer); Cannot compare left expression of type 'java.lang.Integer' with right expression of type 'java.lang.Boolean'
    at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:106)

实体类中processed字段定义:

@Column(columnDefinition = "bit default 0 ")
private Boolean processed;

问题根源

Spring Data JPA的方法名解析逻辑出现歧义:

  • 方法名中的ProcessedIsTrue已经固定了processed字段为true,但你额外传入了Boolean processed参数,导致解析混乱;
  • AndNatalIsOrSolarIs的结构被错误解析,JPA尝试将Integer类型的natal/solar与Boolean类型做比较,触发类型不匹配报错。

解决方案

方案1:修正方法签名(适用于需求为processed=true AND natal=? OR solar=?)

移除多余的processed参数,因为ProcessedIsTrue已经明确了该字段的查询条件:

List<AspectEs> findAllByProcessedIsTrueAndNatalIsOrSolarIs(Integer natal, Integer solar);

方案2:用@Query明确逻辑优先级(适用于需求为processed=true AND (natal=? OR solar=?))

如果需要保证OR的逻辑范围,直接用JPQL编写查询,避免方法名解析的歧义:

@Query("SELECT a FROM AspectEs a WHERE a.processed = true AND (a.natal = ?1 OR a.solar = ?2)")
List<AspectEs> findProcessedWithNatalOrSolar(Integer natal, Integer solar);

内容的提问来源于stack exchange,提问作者Nunyet Calçada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:24:58