JPAのデフォルトの列値

1. 前書き

このチュートリアルでは、JPAのデフォルトの列値を調べます。
これらをエンティティのデフォルトプロパティとして設定する方法と、SQLテーブル定義で直接設定する方法を学習します。

2. エンティティの作成中

デフォルトの列値を設定する最初の方法は、*エンティティプロパティ値として直接設定することです*:
@Entity
public class User {
    @Id
    private Long id;
    private String firstName = "John Snow";
    private Integer age = 25;
    private Boolean locked = false;
}
これで、_new_演算子を使用してエンティティを作成するたびに、指定したデフォルト値が設定されます。
@Test
void saveUser_shouldSaveWithDefaultFieldValues() {
    User user = new User();
    user = userRepository.save(user);

    assertEquals(user.getName(), "John Snow");
    assertEquals(user.getAge(), 25);
    assertFalse(user.getLocked());
}
このソリューションには1つの欠点があります。 SQLテーブル定義を見ると、デフォルト値は表示されません。
create table user
(
    id     bigint not null constraint user_pkey primary key,
    name   varchar(255),
    age    integer,
    locked boolean
);
したがって、それらを_null_でオーバーライドすると、エンティティはエラーなしで保存されます:*
@Test
void saveUser_shouldSaveWithNullName() {
    User user = new User();
    user.setName(null);
    user.setAge(null);
    user.setLocked(null);
    user = userRepository.save(user);

    assertNull(user.getName());
    assertNull(user.getAge());
    assertNull(user.getLocked());
}

3. スキーマ定義内

  • SQLテーブル定義にデフォルト値を直接作成するには、_ @ Column_アノテーションを使用して、_columnDefinition_パラメーターを設定します。

@Entity
public class User {
    @Id
    Long id;

    @Column(columnDefinition = "varchar(255) default 'John Snow'")
    private String name;

    @Column(columnDefinition = "integer default 25")
    private Integer age;

    @Column(columnDefinition = "boolean default false")
    private Boolean locked;
}
このメソッドを使用すると、デフォルト値がSQLテーブル定義に存在します。
create table user
(
    id     bigint not null constraint user_pkey primary key,
    name   varchar(255) default 'John Snow',
    age    integer      default 35,
    locked boolean      default false
);
そして、エンティティはデフォルト値で適切に保存されます:
@Test
void saveUser_shouldSaveWithDefaultSqlValues() {
    User user = new User();
    user = userRepository.save(user);

    assertEquals(user.getName(), "John Snow");
    assertEquals(user.getAge(), 25);
    assertFalse(user.getLocked());
}
*このソリューションを使用することで、エンティティを初めて保存するときに特定の列を_null_ *に設定できないことに注意してください。 値を指定しない場合、デフォルト値が自動的に設定されます。

4. 概要

この短いチュートリアルでは、JPAでデフォルトの列値を設定する方法を学びました。
いつものように、完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/java-jpa[GitHub上]で入手できます。