项目用 springboot+mybatis +mybatisplus, 数据库是:postgresql 。 执行查询时候返回错误。
org.springframework.dao.DataIntegrityViolationException: Error attempting to get column 'city_id' from result set. Cause: org.postgresql.util.PSQLException: Bad value for type long :
; Bad value for type long : ; nested exception is org.postgresql.util.PSQLException: Bad value for type long
类型long的值不正确
完整错误信息如下
org.springframework.dao.DataIntegrityViolationException: Error attempting to get column 'city_id' from result set. Cause: org.postgresql.util.PSQLException: Bad value for type long :
; Bad value for type long : ; nested exception is org.postgresql.util.PSQLException: Bad value for type long : at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:104)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88)at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)at com.sun.proxy.$Proxy174.selectOne(Unknown Source)at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:159)at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:108)at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:96)at com.sun.proxy.$Proxy204.getUser(Unknown Source)
java对象实体
mybatis mapper XML 文件
<resultMap id="BaseResultMap" type="org.vo.UserVO"><id column="user_id" property="userId"/><result column="city_id" property="cityId"/><result column="sex" property="sex"/><result column="header" property="header"/><result column="nick_name" property="nickName"/><result column="telphone" property="telphone"/><result column="email" property="email"/><result column="address" property="address"/><result column="birthday" property="birthday"/><result column="real_name" property="realName"/><result column="local_address" property="localAddress"/><result column="create_time" property="createTime"/></resultMap><select id="getUser" resultMap="BaseResultMap">SELECT *FROM c_userWHERE user_id = #{userId}</select>
在数据库中 city_id 是空的。
在mysql是正常的。切换到postgresql 就会提示这样的错。
我把数据为空的字段赋值以后就不报错误了。
解决方案:直接在定义BaseResultMap时候定义字段类型 ResultType="Long"
【注意】一定是大写的Long。Long:用于表示long类型的包装类。long 不能等于null,但是包装类是对象可以为null。