Alterar Configuração Hibernate para não gravar todos os Atributos
12 respostas
aureliolima
Olá…
Tem como fazer o hibernate não alterar algum atributo de um objeto?
Pois tenho o seguinte.
usuarioCon.setSenha();
Mas qdo a acao q eu passar for ‘alterar’, não queria q a senha fosse gravada, mas que fosse alterado apenas os outros atributos.
Tentei retirar este ‘setSenha’, quando for alterar, mas o hibernate grava igual.
Não entendi muito bem o que você quer. Mas se você quer em alguns momentos gravar um atributo e em outros não, isso não há como. O Hibernate grava tudo que tem no objeto, exceto campos que tenham a anotação @Transient ou o modifier transient. Aliás isso funciona para qualquer serialização, desde persistencia em banco como gerar XML. O que for marcado como transient não é serializado.
aureliolima
é que é assim, o meu campo ‘senha’ é criptografado usando MD5, pois bem, os dados do usuário podem ser alterados por um determinado tipo de usuário, menos a senha do usuário.
Sendo assim, o hibernate está gravando mesmo se eu retirar o usuarioCon.setSenha();
Até aí sem problemas, pois a senha gravada é a mesma que tem no banco, mas como todas as senhas que são gravadas utilizam criptografia MD5, a senha gravada não será a mesma, pois estaria gerando uma nova criptografia.
Nesse sentido, eu poderia utilizar sua sugestão de marcá-lo com Transient?
Obrigado!
Tiburcio_Mancha
se marcar como transient, além de não alterar, tb não realizará o insert da senha em um novo objeto
aureliolima
ah bom… então tah descartado fazer isso…
o pior que o q foi criptografado nao tem como descriptografar, dai não poderei fazer o q pensei…
mas se alguem tiver + alguma ideía, por favor, poste aí…
Abração!
G
garcia-jj
Há discuções enormes sobre isso, mas eu não sou a favor de enviar a entidade direto para a tela exatamente para evitar isso e outros males. É o tão criticado DTO, que em casos como esse ajuda muito.
aureliolima
É q jah to usando tal objeto numa infinidade de lugares, não sei se seria vantagem utilizar DTO, pois poderia me dar problemas em outros lugares…
hvivox
Parceiro seguinte! isso que vc está querendo se chama “customizar o sql no hiberte”.
Primeiro, o que vc está usando para mapear as entidades? XML ou Anotações?
Se for anotações vc precisa criar uma consulta nomeada com anotações, é bem simples.
Se for XML vc precisa vc precisa criar uma consulta no nomeada onde vc irá fazer um referencia para o arquivo onde tiver a consulta. tipo
<classe name=“User” table=“USERS”>
<id name =“id” column=“USER_ID”>…
<sql-insert>
AQUI VC DEFINI SUA CONSULTA DE ACORDO COM O FORMATO DE SQL DO SEU BANCO (MYSQL, DB2, ORACLE…)
<sql-insert>
</class>
flw. Livro de referencia Java Persistence com Hibernate pg 355 na minha opinão é o melhor livro sobre hibernate já escrito até a data desse post.
aureliolima
to usando xml…
vo tentar fazer isso… mas nao d´pa pra usar HQL ao inves de ??
abs
hvivox
Acredito que não!
hvivox
Não é por nada! mas… porque vc não tenta utilizar as anotações é menos trabalhoso. utiliza o hibernate tools no eclipse. vc pode fazer o mapeamento objeto relacional de duas formas. Do banco para classes (recomendado) ou das classes pro banco
flw
aureliolima
é q o projeto q estou trabalhando já tá bem avançado, e todo ele já está usando xml para fazer os mapeamentos