挿入すると正常に主キーIDを生成するために:私は、アプリケーションを起動したときにHibernateを使用してデータベースにどのように自動Hibernateは私が主キーに定義されたとしてメンバーのエンティティクラス持つレコード
@Id
@GeneratedValue
private Long id;
Iあらかじめロードされた2つのレコード:+ ---- + ------
select * from Member;
+----+---------------------------+------------+--------------+
| id | email | name | phone_number |
+----+---------------------------+------------+--------------+
| 0 | [email protected] | John Smith | 2125551212 |
| 1 | [email protected] | Mary Smith | 2025551212 |
:
insert into Member (id, name, email, phone_number) values (0, 'John Smith', '[email protected]', '2125551212')
insert into Member (id, name, email, phone_number) values (1, 'Mary Smith', '[email protected]', '2025551212')
今MySQLデータベースには二つのレコードを持っています--------------------- + ------------ + -------------- +
は今、私の会員登録ページ、私は新しいメンバーを登録するための要求を送信したとき、私はこのエラーメッセージ受信中:
Caused by: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'PRIMARY'
を私はそれが自動生成されたキーは常に 'で始まるので、それを考え出しました1 'が、データベースにはすでに2つのレコードがあるため、主キー' 1 'は重複しています。
私の質問は、テーブル内にいくつかの既存のレコードがあれば、プライマリキーを正しく作成する方法です。私は
@GeneratedValue
アノテーションを使用しない場合は、私はいつも挿入する前に、データベーステーブルから次のキーは何を見つける必要があります。
この状況を処理する最も良い方法はありますか?
EDITED: 示唆したように、私はStragey使用:奇妙な何
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
すると、2つの既存のレコードは以下のように表に存在する場合、ということです。
select * from English;
+----+------------+---------+--------+
| id | sentence | source | status |
+----+------------+---------+--------+
| 1 | i love you | unknown | 0 |
| 2 | i like you | unknown | 0 |
+----+------------+---------+--------+
私が登録した後テーブルに新しいレコードがある場合、新しいIDは、以下のように3ではなく4で始まります。
select * from English;
+----+----------------+---------+--------+
| id | sentence | source | status |
+----+----------------+---------+--------+
| 1 | i love you | unknown | 0 |
| 2 | i like you | unknown | 0 |
| 4 | I have a book. | Unknown | 0 |
+----+----------------+---------+--------+
3 rows in set (0.00 sec)
これはどうしてですか?
保存に使用するテーブルスキーマとコードを提供する必要があります。一般に、あなたは*何もしないで保存します。これがラッパー型としてのポイントです。 – chrylis
挿入ステートメントにIDを入力しないでください。 – Jens