谁负责MySQL和Hibernate之间主键的自动增量?

MySQL的

CREATE TABLE `role` ( `id_role` INT(11) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id_role`) ) AUTO_INCREMENT=1; 

过冬

 @Entity public class Role { private Integer idRole; @Column(name = "id_role", precision = 10) @GeneratedValue @Id public Integer getIdRole() { return idRole; } public void setIdRole(Integer idRole) { this.idRole = idRole; } } 

鉴于上述背景,谁在创建新role时负责id_role列的自动增量? 换句话说,Hibernate在运行create SQL语句之前是否设置了主键值,还是将其设置为null并让MySQL在获取所选主键时自动递增该字段?

要使用MySQL AUTO_INCREMENT列,您应该使用IDENTITY策略:

 @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; 

在使用带有MySQL的AUTO时,您将获得以下内容:

 @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; 

这实际上相当于

 @Id @GeneratedValue private Long id; 

如果指定GenerationType.IDENTITY ,则数据库将负责分配初始标识符。 所以,使用

 @GeneratedValue(strategy=GenerationType.IDENTITY) 

会让DB负责。

它绝对是数据库。 每个db方言都有一个稍微不同的方式让Hibernate随后查询新分配的ID是什么,以便它可以在你的实体上设置它