的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;
}
}
鉴于上述背景,在创建新id_role
时,谁负责role
列的自动增量?换句话说,Hibernate在运行create
SQL语句之前是否设置了主键值,还是将其设置为null
并让MySQL在获取所选主键时自动递增字段?< / p>
答案 0 :(得分:6)
要使用MySQL AUTO_INCREMENT
列,您应该使用IDENTITY
策略:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
将AUTO
与MySQL一起使用时,您将获得以下内容:
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
实际上相当于
@Id @GeneratedValue
private Long id;
答案 1 :(得分:3)
如果指定GenerationType.IDENTITY
,则数据库将负责分配初始标识符。所以,使用
@GeneratedValue(strategy=GenerationType.IDENTITY)
会让DB负责。
答案 2 :(得分:0)
绝对是数据库。每个db方言都有一个稍微不同的方式让Hibernate随后查询新分配的ID是什么,以便它可以在你的实体上设置它