Spring Boot优惠券应用报coupon_seq表不存在问题求助
我正在开发一款优惠券管理的简易Spring Boot应用,实现优惠券的创建与查询功能。应用启动无异常,但通过Postman发送POST请求时,系统抛出如下错误:
java.sql.SQLSyntaxErrorException: Table 'demo.coupon_seq' doesn't exist
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121) ~[mysql-connector-j-8.3.0.jar:8.3.0]
错误提示demo.coupon_seq表不存在,但我创建的是coupon表,不清楚为何系统会查找coupon_seq表,恳请帮忙排查并提供解决方案。
实体类代码
@Entity @Table(name = "coupon") public class Coupon { @Id @GeneratedValue (strategy = GenerationType.AUTO) private int id; private String couponname; private int discount; @Column(name = "expdata") private String expdate; }
控制器类代码
@RestController @RequestMapping("/coupon") public class CouponController { @Autowired CouponRepository repository; @PostMapping(value = "/createCoupon") public Coupon addCoupon(Coupon coupon) { return repository.save(coupon); } }
application.properties配置
spring.application.name=springcloud spring.datasource.url=jdbc:mysql://localhost:3306/demo spring.datasource.username=root spring.datasource.password=Passw0rd123 spring.jpa.show-sql=true
手动执行的SQL语句
create database demo; use demo; create table coupon ( id int auto_increment, couponname varchar(20), discount int, expdata varchar(10), primary key(id) ); drop table coupon; select * from coupon;
Postman请求情况

问题原因
你使用了@GeneratedValue(strategy = GenerationType.AUTO),在MySQL环境下,JPA默认会选择TABLE主键生成策略,而非MySQL原生的AUTO_INCREMENT。该策略需要一张专门的序列表(默认命名为{表名}_seq)维护主键自增序列,因此系统会查找coupon_seq表,但你未创建这张表,导致报错。
解决办法
有两种可行方案:
方案一:改用MySQL原生自增策略
修改实体类的主键生成策略为GenerationType.IDENTITY,让JPA直接使用MySQL的AUTO_INCREMENT特性,无需额外序列表:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id;
方案二:创建JPA所需的序列表
若坚持使用GenerationType.AUTO,可手动创建coupon_seq表,执行以下SQL:
CREATE TABLE coupon_seq ( next_val BIGINT ); INSERT INTO coupon_seq VALUES (1);
额外注意
检查手动执行的SQL语句,其中包含drop table coupon;,需确保当前数据库中确实存在coupon表,避免因表不存在引发其他异常。
内容的提问来源于stack exchange,提问作者Sai Satwik

