Se você já trabalhou com Hibernate ou JPA, é provável que tenha se deparado com a anotação @Transient
. Embora simples, seu uso adequado evita persistir dados desnecessários e pode te livrar de uma dor de cabeça lá na frente.
No presente artigo, vamos entender o propósito da anotação @Transient, quando e por que usá-la, e ver um exemplo prático com Hibernate.
O que é @Transient
?
A anotação @Transient
indica que um determinado campo de uma entidade não deve ser persistido no banco de dados. Ou seja, o Hibernate (ou qualquer implementação JPA) irá ignorar esse campo no momento de salvar ou atualizar a entidade.
É equivalente ao uso da palavra-chave transient do Java, mas no contexto da persistência ORM.
Por que usar @Transient
Algumas situações comuns onde @Transient
se torna útil:
- Campos calculados: Você quer exibir um valor derivado de outros campos, mas não precisa armazená-lo no banco.
- Campos auxiliares: Dados que são úteis apenas em tempo de execução, como flags de controle ou estruturas temporárias.
- Evitar dados desnecessários: Ajuda a manter seu modelo de dados enxuto e evita redundância.
Exemplo prático
Vamos imaginar uma entidade Produto que calcula seu valor com desconto apenas em tempo de execução:
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
@Entity
@Table(name = "TB01_PRODUTO")
@Getter
@Setter
public class Produto {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private Double preco;
private Double desconto;
@Transient
private Double precoFinal;
public Double getPrecoFinal() {
if (preco != null && desconto != null) {
return preco - (preco * desconto);
}
return preco;
}
}
Nesse exemplo:
- O campo precoFinal não será criado na tabela produto.
- Ele é útil apenas para retorno em uma API ou exibição na UI (User Interface).
- Ele é calculado dinamicamente sempre que for chamado.
Obervações:
- Se você esquecer o @Transient e o campo não tiver um setter, o Hibernate pode lançar exceções.
- @Transient é da JPA, não confundir com transient do Java, que é usado para serialização de objetos Java (por exemplo, em Serializable).
Considerações finais:
A anotação @Transient é uma daquelas ferramentas simples que, quando bem usadas, deixam seu modelo limpo, objetivo e mais alinhado com as boas práticas de arquitetura.
Se um campo não precisa ser persistido, não insista em forçar sua presença no banco. Use @Transient e mantenha a clareza do seu modelo.
Feito!
Nenhum comentário:
Postar um comentário