Spring Boot向SQL expense表插入数据时遇常量解析错误
问题排查与解决
错误原因
你的INSERT语句中值的顺序和expense表的字段顺序不匹配。从实体类映射的表结构来看,字段顺序应为:id → expensedate → description → location → category_id → user1_id(JPA会将关联实体映射为对应主键的外键列)。
但你编写的INSERT语句里,第二个值是字符串'New York Business Trip',对应到了表中类型为TIMESTAMP WITH TIME ZONE的expensedate字段,数据库尝试将该字符串解析为时间类型,因此抛出无法解析的错误。
解决方案
方案1:显式指定字段名(推荐)
在INSERT语句中明确写出要插入的字段名,即使后续表结构调整(比如新增字段、调整字段顺序),也不会出错:
insert into expense (id, expensedate, description, location, category_id, user1_id) values (100, '2019-06-16T17:00:00.000Z', 'New York Business Trip', 'New York', 1, 1);
注:如果你的表中外键列名不是category_id或user1_id(比如自定义了关联列名),需要替换为实际列名。
方案2:严格匹配字段顺序
若不想指定字段名,需保证values的顺序与表的字段顺序完全一致:
insert into expense values (100, '2019-06-16T17:00:00.000Z', 'New York Business Trip', 'New York', 1, 1);
额外建议
作为新手,优先使用显式指定字段名的写法,既能避免因表结构变更引发的错误,也能提升代码的可读性和维护性。
内容的提问来源于stack exchange,提问作者FineFree22
相关产品推荐
相关产品推荐

