Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Annotation para não persistir a entidade no banco!

Olá. Qual anotação devo usar na minha entidade para o Hibernate não persisti-lá no banco?

5 respostas

Você pode usar a @Transient em um atributo, por exemplo:

@Entity
public class User {

    private String name;
    @Transient
    private Email email;
    private String department;
    @Id
    private String employeeID;

    public User() {
    }

    //codigo omitido
}

Neste caso, os dados de email contido em objetos de User serão ignorados.

Preciso na classe inteira e não só em um atributo!

solução!

Para que a classe não seja persistida, basta que ela não seja uma 'entidade' para o Hibernate, ou seja, basta não anotá-la com @Entity.

Agora, se essa sua classe faz parte de algum relacionamento com alguma classe que seja entidade do Hibernate, ela necessariamente deve ser reconhecida pelo mesmo, ou seja, você precisará anotá-la com @Entity (ou @Embeddable. Para mais detalhes dê uma olhada na documentação do Hibernate em https://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html)

Nesta situação, uma vez que sua classe é utilizada como atributo de outra, que por sua vez é uma entidade do Hibernate, basta utilizar a anotação @Transient no atributo como o colega acima já mencionou.

Pelo fato de essa classe fazer parte de um relacionamento, ela deve ser necessariamente persistida no banco? Pois não quero que ela seja persistida, pelo simples motivo de não guardar nenhum dado, tanto a tabela da entidade como a do relacionamento!

Não, o fato da classe fazer parte de um relacionamento não significa que ela deve ser persistida, porém ela deverá ser mapeada para o Hibernate (@Entity ou @Embeddable, por exemplo).

Se você não pretende armazená-la no banco de dados e ela não faz parte de nenhum relacionamento com outras entidades do Hibernate, basta não anotar a classe com @Entity, como mencionado acima.

Se ela faz parte de um relacionamento, o Hibernate precisará ter essa classe mapeada (seja com @Entity ou outra anotação), então anote o atributo que representa o relacionamento com @Transient.