«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;
}

Теперь каждый раз, когда мы будем создавать объект, используя новый оператор установит предоставленные нами значения по умолчанию:

@Test
void saveUser_shouldSaveWithDefaultFieldValues() {
    User user = new User();
    user = userRepository.save(user);
    
    assertEquals(user.getName(), "John Snow");
    assertEquals(user.getAge(), 25);
    assertFalse(user.getLocked());
}

У этого решения есть один недостаток. Когда мы взглянем на определение таблицы 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.

Как всегда, полный исходный код доступен на GitHub.