项目用 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 文件
-
"BaseResultMap" type="org.vo.UserVO"> -
"user_id" property="userId"/> -
"city_id" property="cityId"/> -
"sex" property="sex"/> -
"header" property="header"/> -
"nick_name" property="nickName"/> -
"telphone" property="telphone"/> -
"email" property="email"/> -
"address" property="address"/> -
"birthday" property="birthday"/> -
"real_name" property="realName"/> -
"local_address" property="localAddress"/> -
"create_time" property="createTime"/> -
-
-
-
-
- SELECT *
- FROM c_user
- WHERE user_id = #{userId}
-
在数据库中 city_id 是空的。

在mysql是正常的。切换到postgresql 就会提示这样的错。
我把数据为空的字段赋值以后就不报错误了。
解决方案:直接在定义BaseResultMap时候定义字段类型 ResultType="Long"
【注意】一定是大写的Long。Long:用于表示long类型的包装类。long 不能等于null,但是包装类是对象可以为null。
