谁负责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是什么,以便它可以在你的实体上设置它