Spring Boot+RestAPI+JPA+MySQL实现CRUD启动报错求助
问题排查及解决方案
核心错误根因
从报错日志Caused by: org.springframework.data.mapping.PropertyReferenceException: No property addMovie found for type Movie!可以直接定位到问题出在JPA Repository层,共有3处需要修改:
1. 删除Repository中多余的自定义方法
Spring Data JPA会自动根据接口方法名推导查询逻辑,你声明的addMovie方法不属于JPA约定的查询命名规则,框架会误将addMovie识别为Movie实体类的属性去匹配,导致报错。
且CrudRepository已经内置了save()方法用于新增/更新数据,不需要自行定义新增方法,直接删除IMovieRepo接口中如下代码即可:
public Movie addMovie(String movieName,Integer rating,String Genre);
2. 修正CrudRepository泛型主键类型
CrudRepository的第二个泛型参数是实体类主键的类型,你的Movie实体主键mNo为String类型,但当前Repository定义写的是Integer,类型不匹配会导致后续数据库操作报错。
修改IMovieRepo的继承声明:
public interface IMovieRepo extends CrudRepository<Movie, String>{ // 无需额外自定义新增方法,直接用继承的save()即可 }
3. 补全application.properties的JPA必要配置
当前配置缺少JPA和MySQL驱动的必要参数,会导致连接数据库、表结构映射异常,补充如下配置:
# 配置MySQL驱动类(mysql 8.x+版本用cj下的Driver) spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 补充时区参数避免时区异常 spring.datasource.url=jdbc:mysql://localhost:3306/sakila?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai # 配置JPA自动更新表结构,可选值:none/create/create-drop/update/validate spring.jpa.hibernate.ddl-auto=update # 开启SQL打印方便调试 spring.jpa.show-sql=true # 配置MySQL方言 spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
验证方式
修改完成后重启项目,请求POST http://localhost:8082/Restful-App-Movies/movies/add/,请求体传入:
{ "mNo": "M001", "mName": "泰坦尼克号", "rating": 9, "genre": "爱情" }
即可正常插入数据到数据库。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

