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 .