【Postgres SQL】报错:操作符不存在: character varying = integer(但是我的数据类型都是Integer)
·
问题描述:
我使用mybatis操作pgsql数据库,查询语句如下:
<select id="selectMovieListByActorId" parameterType="java.lang.Integer" resultType="team.first.movie_api.domain.Movie">
select * from movie_db.movie where id in (
select movie_id from movie_with_actor where actor_id = ${id,jdbcType=INTEGER})
</select>
我的mapper接口方法是
List<Movie> selectMovieListByActorId(Integer id);
数据库中表的字段都为int4,没有varchar类型
执行报错:
### Error querying database. Cause: org.postgresql.util.PSQLException: 错误: 操作符不存在: character varying = integer
建议:没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.
位置:107
### The error may exist in file [E:\实用数据库开发\project\movie-api-boot\target\classes\mapper\ActorMapper.xml]
### The error may involve team.first.movie_api.mapper.ActorMapper.selectMovieListByActorId-Inline
### The error occurred while setting parameters
### SQL: select * from movie_db.movie where id in (select movie_id from movie_with_actor where actor_id = 1031862)
### Cause: org.postgresql.util.PSQLException: 错误: 操作符不存在: character varying = integer
建议:没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.
位置:107
将传参部分${} 换为 #{}还是报同样的错
数据库结构如下:

问题分析:
- 首先我的表不存在
varchar类型,方法的传参也都是Integer,所以问题应该不是出在vharchar = integer上 - 仔细检查sql语句发现内嵌查询没有给表名前加模式名
movie_db - 将原本语句更改如下,问题解决
<select id="selectMovieListByActorId" parameterType="java.lang.Integer" resultType="team.first.movie_api.domain.Movie"> select * from movie_db.movie where id in ( select movie_id from movie_db.movie_with_actor where actor_id = ${id,jdbcType=INTEGER}) </select> - 解决办法2:将数据库全部放在public下,这样就可以免去在表明前添加模式名的麻烦,而且不易出错
总结:数据库的查询语句应该指明具体的表的位置(如果有多个模式,前面加上模式名),不指明模式的话就会默认去public模式下查找,从而报错。
总总结:这就是个很基本的错误,居然搞了好久才发现问题,我真傻,真的 =_=!
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)