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

时间:2013-03-13 16:22:02

标签: 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;

休眠

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

3 个答案:

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