As vezes temos a necessidade de utilizarmos atributos transients, que são atributos que não são persistidos, e em algumas demandas precisamos guardar um valor inicial vindo do banco nesse campo e por padrão o JPA não irá preencher esse campo, para resolver esse problema temos a anotação @PostLoad que executa o método após o carregamento da entidade.
@Entity public class CarregandoAtributo { @Id private Long id; private BigDecimal valorVenda; @Transient private BigDecimal valorInicialVenda; @PostLoad private void iniciarValorVenda() { this.valorInicialVenda = this.valorVenda; } ...
Após a entidade ser carregada, pode ser por uma critéria, HQL ou até mesmo pelo find do JPA, será executado o método iniciarValorVenda que atribui o valor de valorVenda para valorInicialVenda que é transient.