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
相关产品推荐
相关产品推荐

