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>
相关推荐
洋就在江州1 分钟前
gitlab-cicd 离线集成——springboot-cicd (非docker形式,shell形式)
java·spring boot·后端·ci/cd·gitlab·gitlab-runner
Nebula_g8 分钟前
JavaSE加强:线程Thread(线程安全重点)
java·开发语言·jvm·算法·javase·技术栈
令狐少侠201113 分钟前
centos7 下,使用docker 部署IOT 调试平台,ThingsBoard 并完美启动
java·spring boot·iot
JAVA面经实录91719 分钟前
Java高级后端 · 全套面试通关手册(线上故障排查)
java·jvm·面试
IT_Octopus19 分钟前
【零基础入门 LLM 开发 · Day 11】:ChatOpenAI vs init_chat_model——一行换供应商
java·前端·javascript
Wang's Blog34 分钟前
Java 中间件之 RabbitMQ 快速入门: MQ 常见技术选型对比
java·中间件·java-rabbitmq
蜗牛互联网34 分钟前
Java Agent 工具调用的 allowlist、参数校验与调用预算
java·开发语言·人工智能·后端·oracle
大文说跨境35 分钟前
多账号环境隔离方案技术选型:指纹浏览器、VPS 与云手机的三种架构对比
java·开发语言·前端
骉马代驾43 分钟前
代驾系统长连接实战(二):心跳、断线重连与消息补偿的完整实现
java
程序员Sunday1 小时前
Spring @Transactional 没回滚?按代理调用、异常和传播行为排查
java·后端·spring