Valores de coluna padrão na JPA

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.