Executáveis
Introdução
@Executáveis
O JPA oferece diversas anotações que permitem interceptar eventos durante o Ciclo de Vida da Entidade. Entre elas, as anotações @PrePersist
, @PreUpdate
, @PostPersist
e @PostUpdate
são úteis para executar ações antes ou depois da persistência e atualização das entidades.
Cenário
Vamos elaborar uma apresentação sobre o uso das anotações @PrePersist, @PreUpdate, @PostPersist e @PostUpdate no JPA. A apresentação incluirá uma explicação introdutória sobre essas anotações, seguida de um exemplo prático. O exemplo abordará um cadastro de Clientes
, contendo os campos id
, nome
, dataInclusao
e dataAlteracao
, sendo que as datas de inclusão e alteração serão definidas automaticamente no momento da persistência. Além disso, o campo localizacao
será uma combinação do id
e nome
, gerado após a persistência do cliente.
import javax.persistence.*;
import java.time.LocalDate;
@Entity
public class Cliente {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private LocalDate dataInclusao;
private LocalDate dataAlteracao;
private String localizacao;
@PrePersist
private void prePersist() {
this.dataInclusao = LocalDate.now(); // Define a data de inclusão com a data atual
}
@PreUpdate
private void preUpdate() {
this.dataAlteracao = LocalDate.now(); // Define a data de alteração com a data atual
}
@PostPersist
private void postPersist() {
this.localizacao = gerarLocalizacao(); // Gera a localização após a persistência
}
@PostUpdate
private void postUpdate() {
this.localizacao = gerarLocalizacao(); // Atualiza a localização após a atualização
}
private String gerarLocalizacao() {
return id + "_" + nome; // Combina o id com o nome para gerar a localização
}
// Lombok ou Getters e Setters
}
Explicação
- @PrePersist:
- Executada antes da persistência do objeto no banco de dados.
- Usada para definir o campo dataInclusao com a data atual e gerar o campo localizacao.
- @PreUpdate:
- Executada antes de atualizar o objeto no banco de dados.
- Usada para definir o campo dataAlteracao com a data atual.
- @PostPersist:
- Executada depois da persistência no banco de dados.
- Aqui, ela é usada para garantir que o campo localizacao tenha o valor correto após a persistência.
- @PostUpdate:
- Executada depois da atualização no banco de dados.
- Garantimos que o campo localizacao seja atualizado sempre que a entidade for alterada.