我在比较 MyBatis 中的日期时遇到如下问题
引起:java.lang.IllegalArgumentException:无效比较:java.util.Date 和 java.lang.String
java 'applyDate' 和 Postgres 'org_info.apply_date' 类型都是 Date
这是我的配置:
<sql id="searchCriteriaSql">
<where>enter code here
<if test="applyDate != null && applyDate != '' ">
<![CDATA[org_info.apply_date <= #{applyDate}]]>
</if>
<if test="ogrNm != null && ogrNm != '' ">
<bind name="ogrNmKey"
value="'%' + ogrNm + '%'" />
AND ( upper(org_info.org_nm) LIKE upper(#{ogrNmKey}))
</if>
</where>
</sql>
根本原因来自
<![CDATA[org_info.apply_date <= #{applyDate}]]>
org.mybatis.spring.MyBatisSystemException:嵌套异常是 org.apache.ibatis.exceptions.PersistenceException:
比较:java.util.Date 和 java.lang.String
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:97) ~[mybatis-spring-2.1.0.jar:2.1.0]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439) ~[mybatis-spring-2.1.0.jar:2.1.0]
at com.sun.proxy.$Proxy46.selectOne(Unknown Source) ~[?:?]
<if test="fromDate!=null and fromDate!=''">
AND a.punch_date >= #{fromDate}
</if>
<if test="toDate!=null and toDate!=''">
AND a.punch_date <= #{toDate}
</if>
为了解决上述问题,需要更改查询语法。
在此输入代码
<if test="fromDate != null">
AND a.punch_date >= #{fromDate}
</if>
<if test="toDate != null">
AND a.punch_date <= #{toDate}
</if>
是的。删除 if 条件中的“and fromDate!=''””