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 .