Spring Boot整合PostgreSQL插入URL字段报smallint类型语法错误
问题根因
这个报错和Spring Boot实体类定义无关,你是直接执行SQL文件触发的错误,核心原因是INSERT语句的列与值出现错位,PostgreSQL把你传入的URL字符串匹配到了smallint类型的字段上做类型转换,最终报错。
排查方向
按优先级从高到低检查:
- 先核对问题SQL的列清单和VALUES内值的对应关系:数清楚列清单里写了多少个字段,对应每个VALUES括号里有多少个值,90%的同类报错都是这里多写/漏写了一个值,导致后续所有值顺位偏移——比如
things前面少写了一个值,就会出现前一个字段拿到本该给更前字段的值、smallint类型字段拿到URL字符串的情况,和你现在的报错完全吻合。 - 登录PostgreSQL数据库执行
\d 你的实际表名,直接查看表的真实结构,不要只参考Java实体类定义:- 确认表中确实存在
item_url字段,且字段类型是varchar/text等字符串类型,没有被误设为smallint - 确认当前连接的数据库、schema正确,没有操作到结构不同的旧同名表
- 确认表中确实存在
- 如果你依赖Hibernate的
ddl-auto=update自动同步表结构,不要默认它一定同步成功:字段名映射冲突、数据库方言配置错误都可能导致item_url列没有被实际创建,此时执行带该列的INSERT也可能出现异常类型报错。
快速验证方法
单独执行只包含两个字段的插入语句做测试:
INSERT INTO 你的表名(things, item_url) VALUES (5, 'https://someurl.com/that-im/trying-to-add/');
如果该语句执行成功,就能100%确认是原长INSERT语句的列、值顺序/数量不匹配,逐行对齐列和值的位置就能找到错位点。
内容的提问来源于stack exchange,提问作者scottyboombox
相关产品推荐
相关产品推荐

