LoginSignup
0
1

JPAでEntityを作る時にむやみに@GeneratedValueをつけるな

Last updated at Posted at 2017-12-08

まあ、メモ程度の内容なのでちょっといらっとして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の設定も設定で行うこと。
してないなら外す。

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1