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.