Java+Spring Boot项目POST写入MySQL失败返回500错误
问题根因
两个报错中,no such instance field: 'requestActive'是IntelliJ IDEA调试器的已知兼容问题,和业务代码无关,不会触发接口500,清理IDEA缓存重启调试即可消除,无需修改业务代码。
真正导致POST请求返回500的是org.hibernate.exception.GenericJDBCException: could not execute statement,即Hibernate执行插入SQL语句失败。GET请求可正常运行说明数据库连接本身正常,问题集中在实体映射、表结构匹配、实体类定义环节,按以下步骤排查修复即可。
修复步骤
- 检查JPA表结构自动同步配置
打开项目的application.properties或application.yml配置文件,确认spring.jpa.hibernate.ddl-auto配置项,开发环境可设置为update,让Hibernate自动根据当前Movie实体类生成、更新对应表结构。你将原教程的Employee实体替换为Movie后,如果该配置为validate或none,数据库中不存在匹配Movie实体的表、字段,执行插入时就会抛出SQL执行错误。 - 补全实体类必要定义
你贴出的Movie类仅展示了字段部分,需要逐一确认:- 类上添加了
@Entity注解,标记该类为JPA持久化实体 - 存在无参公共构造方法,JPA要求所有实体类必须提供无参构造器才能正常实例化
- 所有字段都有对应的getter/setter方法,尤其是Service层调用的
setMovieCode()方法;如果使用Lombok简化代码,需要在类上添加@Data注解,否则会出现属性赋值失败、插入SQL参数缺失的问题
- 类上添加了
- 修正Repository层方法注解
你定义的deleteMovieById属于数据修改类操作,需要在方法上添加@Transactional注解,否则JPA运行时会抛出事务缺失错误,该问题不会直接影响新增操作,但后续调用删除接口时会触发报错。 - 校验Postman请求格式
发起POST请求时,请求头需设置Content-Type: application/json,请求体选择raw格式的JSON,不需要传入后端自动生成的id、movieCode字段,参考格式:
{ "name": "示例电影", "email": "test@demo.com", "jobTitle": "科幻", "phone": "13800000000", "imageUrl": "/img/test.jpg" }
验证方法
修改完以上配置后重启项目,再次发起POST请求,若控制台无JDBC异常打印,且接口返回201状态码与新增的电影信息,即说明问题修复。
内容的提问来源于stack exchange,提问作者Nathan R
相关产品推荐
相关产品推荐

