5

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 是在运行createSQL 语句之前设置主键值,还是将其设置为null并让 MySQL 在取回所选主键时自动递增字段?

4

3 回答 3

6

要使用 MySQLAUTO_INCREMENT列,您应该使用以下IDENTITY策略:

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

这是你在使用AUTOMySQL 时会得到的:

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

这实际上相当于

@Id @GeneratedValue
private Long id;
于 2013-03-13T17:11:10.767 回答
3

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

@GeneratedValue(strategy=GenerationType.IDENTITY)

会让数据库负责。

于 2013-03-13T16:33:42.577 回答
0

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

于 2013-03-13T16:27:08.983 回答