Стойности на колоните по подразбиране в JPA

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

Не забравяйте, че като използваме това решение, няма да можем да зададем нула на дадена колона при първото запазване на обекта. Ако не предоставим никаква стойност, стойността по подразбиране ще бъде зададена автоматично.

4. Обобщение

В този кратък урок научихме как да зададете стойности на колони по подразбиране в JPA.

Както винаги, пълният изходен код е достъпен в GitHub.