Valores de coluna padrão na JPA
1. Introdução
Neste tutorial, veremos os valores de coluna padrão no JPA.
Aprenderemos como defini-los como uma propriedade padrão na entidade, bem como diretamente na definição da tabela SQL.
2. Ao criar uma entidade
A primeira maneira de definir um valor de coluna padrão éset it directly as an entity property value:
@Entity
public class User {
@Id
private Long id;
private String firstName = "John Snow";
private Integer age = 25;
private Boolean locked = false;
}
Agora, sempre que criarmos uma entidade usando o operadornew, ela definirá os valores padrão que fornecemos:
@Test
void saveUser_shouldSaveWithDefaultFieldValues() {
User user = new User();
user = userRepository.save(user);
assertEquals(user.getName(), "John Snow");
assertEquals(user.getAge(), 25);
assertFalse(user.getLocked());
}
Há uma desvantagem desta solução. Quando dermos uma olhada na definição da tabela SQL, não veremos nenhum valor padrão nela:
create table user
(
id bigint not null constraint user_pkey primary key,
name varchar(255),
age integer,
locked boolean
);
Então,if we override them with null, the entity will be saved without any error:
@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. Na definição de esquema
Para criara default value directly in the SQL table definition, podemos usar a anotação@Column e definir seu parâmetrocolumnDefinition:
@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;
}
Usando este método, o valor padrão estará presente na definição da tabela 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
);
E a entidade será salva corretamente com os valores padrão:
@Test
void saveUser_shouldSaveWithDefaultSqlValues() {
User user = new User();
user = userRepository.save(user);
assertEquals(user.getName(), "John Snow");
assertEquals(user.getAge(), 25);
assertFalse(user.getLocked());
}
Lembre-se de queby using this solution, we won’t be able to set a given column to null ao salvar a entidade pela primeira vez. Se não fornecermos nenhum valor, o valor padrão será definido automaticamente.
4. Sumário
Neste breve tutorial, aprendemos como definir valores de coluna padrão em JPA.
Como sempre, o código-fonte completo está disponívelover on GitHub.