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

sp0*_*00m 5 java mysql hibernate auto-increment

MySQL的

CREATE TABLE `role` (
  `id_role` INT(11) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id_role`)
) AUTO_INCREMENT=1;
Run Code Online (Sandbox Code Playgroud)

过冬

@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;
    }

}
Run Code Online (Sandbox Code Playgroud)

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

Suj*_*ddi 6

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

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
Run Code Online (Sandbox Code Playgroud)

使用AUTOMySQL 时会得到以下内容:

@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
Run Code Online (Sandbox Code Playgroud)

这实际上相当于

@Id @GeneratedValue
private Long id;
Run Code Online (Sandbox Code Playgroud)