Рубрики
Без рубрики

Значения столбцов по умолчанию в JPA

Узнайте, как установить значения столбцов по умолчанию в JPA.

Автор оригинала: baeldung.

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());
}

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