如何通过Hibernate实体类创建MySQL AUTO INCREMENT列?
解决方案
其实@GeneratedValue(strategy=GenerationType.IDENTITY)本身就可以让Hibernate在创建新表时自动给id列添加AUTO_INCREMENT属性,你遇到问题大概率是以下几个细节没处理到位:
必须配置正确的MySQL方言
Hibernate需要根据数据库方言生成对应的DDL语句,如果没指定或指定错误,就不会生成AUTO_INCREMENT。在你的Hibernate配置文件中添加:<property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>(根据你的MySQL版本选择对应方言,比如MySQL5用
org.hibernate.dialect.MySQL5Dialect)注意
hbm2ddl.auto=update的行为限制update模式只会新增表/列,不会修改已有列的属性。如果你的表之前已经创建且employee_id没有自增属性,update不会帮你修改。可以临时改成create或create-drop生成新表,测试成功后再改回update。正确的实体类注解示例
确保你的实体类注解组合正确,完整示例如下:@Entity @Table(name = "employees") public class Employee { @Id @Column(name = "employee_id", nullable = false) @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; // 其他字段、getter和setter方法 }
如果以上方法还是不行,可以用columnDefinition强制指定列属性(不推荐,会降低数据库兼容性):
@Id @Column(name = "employee_id", nullable = false, columnDefinition = "INT AUTO_INCREMENT") @GeneratedValue(strategy = GenerationType.IDENTITY) private int id;
内容的提问来源于stack exchange,提问作者Nar1989
相关产品推荐
相关产品推荐

