invalid comparison

invalid comparison

问题描述

springboot项目,调用接口时,控制台报错,错误日志如下:

复制代码
### Error querying database.  Cause: java.lang.IllegalArgumentException: invalid comparison: java.time.LocalDateTime and java.lang.String
### Cause: java.lang.IllegalArgumentException: invalid comparison: java.time.LocalDateTime and java.lang.String
	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:156)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425)
	... 65 common frames omitted
Caused by: java.lang.IllegalArgumentException: invalid comparison: java.time.LocalDateTime and java.lang.String
	at org.apache.ibatis.ognl.OgnlOps.compareWithConversion(OgnlOps.java:79)
	at org.apache.ibatis.ognl.OgnlOps.isEqual(OgnlOps.java:131)
	at org.apache.ibatis.ognl.OgnlOps.equal(OgnlOps.java:703)
	at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:37)
	at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:171)
	at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:206)
	at org.apache.ibatis.ognl.ASTAnd.getValueBody(ASTAnd.java:45)
	at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:171)
	at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:206)
	at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:408)
	at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:383)
	at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:47)
	at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)
	at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:34)
	at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)
	at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:39)
	at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:320)
	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:135)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154)
	... 70 common frames omitted

问题原因

‌类型不匹配‌。LocalDateTime 是日期时间类型,而字符串(如 "")是文本类型。Java 不允许直接比较这两种类型,尤其是在数据库查询或ORM框架(如MyBatis、Hibernate)中。

本例中,报错,是因为在Mybatis的Mapper文件中存在如下的代码

复制代码
<if test="startTime != null and startTime != ''">
     and re.start_time >= #{startTime}
</if>

解决方案

移除无效的空字符串比较‌,剔除条件 and startTime != ''

复制代码
<if test="startTime != null">
     and re.start_time >= #{startTime}
</if>
相关推荐
这个DBA有点耶11 小时前
SQL调优进阶:从“优化一条SQL”到“优化一个系统”的思维升级
java·大数据·数据库·sql·程序人生·dba·改行学it
csdn2015_12 小时前
springboot读取配置的方法
java·spring boot·spring
AOwhisky12 小时前
下一代容器来了?Docker 宣布原生支持 WebAssembly
java·运维·docker·容器·rust·wasm
云云只是个程序马喽14 小时前
海外短剧平台搭建方案:私有化源码系统选型|云微短剧系统技术架构拆解
java·php
C137的本贾尼15 小时前
第七篇:消息队列(MQ)——就是个带存储的异步通信管道
java·开发语言·中间件
Flittly15 小时前
【AgentScope Java新手村系列】(19)多模态-图像音频视频
java·spring boot·spring
Javatutouhouduan15 小时前
国内大厂Java面试高频题库(2026突击版)
java·架构师·java面试·java面试题·后端开发·java程序员·java八股文
Tim_1015 小时前
【C++】017、new/delete与malloc/free的区别
java·数据结构·算法
青山木15 小时前
一把 Redis 分布式锁,踩透四个坑:锁争抢、僵尸锁、锁过期、锁丢失
java·数据库·redis·后端
Java内核笔记16 小时前
万字避坑!Spring Boot 3.x 升 4.0 最全升级指南(附 Migration Checklist,建议收藏⭐)
java·后端