Hibernate ignorar atributo nao @Transient ao persistir
5 respostas
F
fabiofalci
Olá.
Preciso que o hibernate ignore um atributo não @Transient ao persistir.
Pq não @Transient?
Pq numa situação preciso que este objeto passe pela rede, ou seja, ele será serializado e o processo de serialização também ignora @Transient.
Mas nesse caso quero o atributo vá junto.
Ou seja, se coloco @Transient ele não é persistido, o correto.
Mas ele não passa pela rede.
Se não coloco @Transient, ele será persistido, errado.
Por outro lado ele passará pela rede.
Uma solução seria criar uma classe, herdando a primeira, configurando essa classe para serializar o atributo marcado como @Transient.
Essa classe seria utilizada na serialização do objeto pela rede.
Outra solução, seria setar o atributo para null, antes da chamada do hibernate.
F
fabiofalci
Obrigado pelas dicas heatcold. Me deu algumas ideias.
A primeira opção é complicado. Muitas classes.
Apenas se usasse uma manipulação de bytecode para gerar essas classes em runtime. Mas isto tb teria problemas, pois o outro lado, a outra JVM não teria essas novas classes geradas em runtime.
A segunda opção não é viável pois não existe coluna para este atributo na tabela, não é questão de ser ou não persistido, mas sim não há onde persistir. Dai o hibernate estoura pois a coluna não existe.
H
heatcold
Uma outra forma de fazer o que você quer seria escrever manualmente o insert.
D
dalifreire
ja tentou colocar os atributos insertable=false, updatable=false na anotação @JoinColumn?
R
rafaelob
Bem, pensei que a semântica fosse diferente, do modificador transient, do java, para indicar que o atributo não vai ser serializável, e o @Transient do JPA que é para informar que o atributo não vai ser persistente, estou errado? Tem certeza @Transient do JPA também funcionapara indicar que o atributo não irá ser serializável? … De todo modo, eu uso o @Transient no método get do objeto, e nunca tive problemas com a serialização.