Перейти к основному содержимому

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

· 3 мин. чтения

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 .