«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.