5

MySQL

CREATE TABLE `role` (
  `id_role` INT(11) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id_role`)
) AUTO_INCREMENT=1;

Hibernate

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

DBを担当のままにします。

于 2013-03-13T16:33:42.577 に答える
0

それは間違いなくデータベースです。各 db ダイアレクトには、Hibernate が新しく割り当てられた ID をクエリしてエンティティに設定できるようにするためのわずかに異なる方法があります。

于 2013-03-13T16:27:08.983 に答える