SpringBoot/JPAを使うと、アノテーションベースでテーブル定義を作れて楽ちん♪
しかし、細かいとこらラップされていたりするので、たまにはまる。。。
採番やシーケンスではまったので、その時の備忘録φ(..)メモメモ
@GeneratedValue(strategy = GenerationType.AUTO)
とりあえず、IDを付与するのであれば、以下の感じでOK。
application.propertiesでspring.jpa.hibernate.ddl-auto
を設定すると、
hibernate_sequence
という全体で一つのSEQUENCEが作成され、それをつかって採番される。
@Setter @Getter @Entity @Table(name = "user") public class UserEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long userId; }
ただ、全体で1つのシーケンスなので、 * 起動時に初期データを投入するimport.sqlを使う場合や * テーブルごとにIdを連番にしたい場合 うまくいかなくなってしまう。。。
@GeneratedValue(strategy = GenerationType.SEQUENCE)
JPAでは、@SequenceGeneratorを使うと、シーケンスまで作ってくれるので、それをちゃんと追加ましょうというお話
@Setter @Getter @Entity @Table(name = "user") public class UserEntity { @Id @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "user_user_id_seq") @SequenceGenerator( name = "user_user_id_seq", sequenceName = "user_user_id_seq", initialValue = 1, allocationSize = 1) private Long userId; }
注意: 番号を1から始めたい場合は、allocationSize = 1
を指定すること!
デフォルトが50になっているので、指定しないと@Idのフィールドに50が入ってきてえ!?ってなる
デフォルトこわい。。。。
以上!!
参考になる書籍
Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発
- 作者: 株式会社NTTデータ
- 出版社/メーカー: 翔泳社
- 発売日: 2016/07/21
- メディア: 大型本
- この商品を含むブログ (1件) を見る
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2017/12/20
- メディア: 単行本
- この商品を含むブログを見る
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2018/01/30
- メディア: 単行本
- この商品を含むブログを見る
はじめてのSpring Boot―スプリング・フレームワークで簡単Javaアプリ開発 (I・O BOOKS)
- 作者: 槙俊明
- 出版社/メーカー: 工学社
- 発売日: 2016/09/01
- メディア: 単行本
- この商品を含むブログ (1件) を見る