Hibernate报错hibernate_sequence表不存在,现有方案无效如何解决
@Entity
@Table(name="person")
public class Person {
@Id @GeneratedValue(strategy=GenerationType.AUTO) //<----- 也尝试过使用IDENTITY策略 @Column(name="id") private long pid; @Column(nullable=false) private String name; @Embedded private Address address; // 对应getter、setter方法及构造函数
}
### Address.java嵌入式类代码 ```java @Embeddable public class Address { @Column(name="street") private String street; @Column(name="city") private String city; @Column(name="zipcode") private long zipcode; // 对应构造函数 }
报错日志

请帮忙指出我代码或配置中的错误,谢谢。
解决方案
你遇到的hibernate_sequence不存在报错,是方言配置和主键策略适配的问题,按以下步骤修改即可解决:
- 修正hibernate.cfg.xml中的方言配置,替换为适配MySQL8的版本:
<!-- 替换原有org.hibernate.dialect.MySQLDialect --> <property name="dialect">org.hibernate.dialect.MySQL8Dialect</property>
旧版本MySQLDialect默认将GenerationType.AUTO映射为序列生成策略,但MySQL本身不支持序列,才会触发找不到序列表的报错。替换为MySQL8专属方言后,会默认适配MySQL的自增主键逻辑。
2. 明确指定主键生成策略为IDENTITY,避免Hibernate自动适配出现偏差:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") private long pid;
- (可选校验)如果person表是提前手动创建的,检查id字段是否已经开启
AUTO_INCREMENT属性;如果是通过hbm2ddl.auto=update自动生成表结构,修改配置后重启应用会自动补全自增属性。
内容的提问来源于stack exchange,提问作者Tanzeel
相关产品推荐
相关产品推荐

