LoginSignup
6
2

Spring Data JPAをAutonomous Databaseで使う

Posted at

Google Cloud PlatformからOracle Cloud Infrastructureに乗り換えつつありますが、RDBもCloud SQLのPostgreSQLからAutonomous Databaseに移行しています。Spring Data JPAでちょっと苦労したので書き残しておきます。

PostgreSQL

PostgreSQLではシリアルデータ型を列に指定することで、データインサート時にテーブル作成時自動的に作成されたシーケンスから採番した値をシリアルデータ型の列に格納してくれる機能があります。

CREATE TABLE user (
    id SERIAL NOT NULL,
    ...
);

Spring Data JPAのEntityクラスでは

public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;
    ...
}

のようにIdアノテーションとGeneratedValueアノテーションを指定することでシーケンスから採番した値をidに設定することができます。

Autonomous Database

Autonomous Databaseにはシリアルデータ型と同様のものはないので別の方法に変更しますが、使い勝手が変わらないようにデータベースのシーケンスから採番する方法とします。

CREATE TABLE user (
    id NUMBER NOT NULL,
    ...
);

自動的には作成されないのでシーケンスを作成します。

CREATE SEQUENCE user_id_seq;

Spring Data JPAのEntityクラスは

public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_id_generator")
    @SequenceGenerator(name = "user_id_generator", sequenceName = "user_id_seq", allocationSize = 1)
    @Column(name = "id")
    private Long id;
    ...
}

のようにstrategyにGenerationType.SEQUENCEを、SequenceGeneratorアノテーションのsequenceNameに上記で作成したシーケンスを指定します。
シーケンスを指定しない場合はhibernate_sequenceが作成され使われます。採番が必要なテーブルが少なければhibernate_sequenceを使うのでも良いでしょう。

6
2
0

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
6
2