まあ、メモ程度の内容なのでちょっといらっとしてtwitterにつぶやくかなと思ったけどあえてqiitaで記録する。
JPAのハンズオンやらサンプルやら説明サイトやら色んな所でコードを書く時にEntity設定をコピペーで作ってしまって説明が抜けてる手抜きサイトが多いですが、
たとえば、以下のサンプルコードがあったとしましょ
@Entity
@Table(name="users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name="name")
private String name;
@Column(name="password")
private String password;
...
}
質問:これだけで動きますか?
正解:動きません
理由:DB上にキーに対する定義をしないと動きません。
たとえば、MySQLだとキーにAUTO_INCREMENTなどの設定をしないと動きません。
なのでUUIDなどをjavaから生成してキーにしているテーブルを使っている場合は@GeneratedValueアノテーションを外してください。
このへんを説明しないサイトを見てこちらに問い合わせするのはやめてくれ。。。
結論:
@GeneratedValueを使う時はDBの設定も設定で行うこと。
してないなら外す。