VRaptor 3 e Hibernate - Problemas com atualização de dados [RESOLVIDO]  XML
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Autor Mensagem
sun.freitas
Entusiasta Java
[Avatar]

Membro desde: 20/10/2009 14:33:18
Mensagens: 16
Offline

Caros colegas, estou com um pequeno problema quando vou alterar um registro existente no meu banco.
Carrego normalmente os dados o objeto com "return (Idioma) session.load(Idioma.class, id)" e os envio para o formulário de edição:



A classe idioma utilizada acima segue logo abaixo:



quando envio o formulário (com ou sem alteração), o objeto é atualizado, mas os campos que eu não declaro no formulário são setados como null, apagando desta forma informações que preciso, tais como a "datacriacao" de tal registro. Estou utilizando session.update(idioma) para atualizar, sendo que já testei com session.merge() tb e não funfou.
Como vocês têm feito para contornar essa situação?
Agradeço a atenção pessoal.

This message was edited 1 time. Last update was at 07/06/2011 18:27:23


SUN Freitas
[MSN]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

um dos jeitos é vc fazer o seguinte:

- carrega o Idioma do banco pelo id
- copie os campos que vc sabe que vão vir do formulário do que veio como parâmetro pro que veio do banco


não precisa nem fazer o update, se estiver dentro de uma transação o hibernate já faz o update automaticamente

--
Caelum
www.caelum.com.br

sun.freitas
Entusiasta Java
[Avatar]

Membro desde: 20/10/2009 14:33:18
Mensagens: 16
Offline

Lucas, seria mais ou menos isso aqui?:

Funfou legal utilizando try/catch. Mas terei que fazer isso sempre? e quanto a modelos que possuem trocentos atributos???

SUN Freitas
[MSN]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

qual o motivo do try..catch?

a linha dao.altera(dbidioma) não é necessária, o hibernate vai fazer isso automaticamente

--
Caelum
www.caelum.com.br

sun.freitas
Entusiasta Java
[Avatar]

Membro desde: 20/10/2009 14:33:18
Mensagens: 16
Offline

Lucas, o eclipse acusou que era necessário realizar um try...catch. E outra. neste trecho do código ainda não foi iniciada uma transação, esta é iniciada dentro do IndiomaDao.atualiza(idioma). No caso eu teria que copiar tudo pra lá?

SUN Freitas
[MSN]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

se a transação está dentro do atualiza, então deixe como está...


o eclipse só vai te pedir pra fazer try..catch(Exeption) se algum dos métodos que vc está chamando está com throws Exception.

evite fazer isso

--
Caelum
www.caelum.com.br

sun.freitas
Entusiasta Java
[Avatar]

Membro desde: 20/10/2009 14:33:18
Mensagens: 16
Offline

De boa então... vo tentar criar um mecanismo aqui genérico pra usar nas outras classes utilizando esta idéia aew.
Muito obrigado pela ajuda Lucas, notei que você é bastante ativo aqui no fórum.
Acho que posso dar este tópico como resolvido.

SUN Freitas
[MSN]
sun.freitas
Entusiasta Java
[Avatar]

Membro desde: 20/10/2009 14:33:18
Mensagens: 16
Offline

Lucas, só mais uma dúvida. Por curiosidade, a outra forma seria carregar todos os dados do objeto no formulário?

SUN Freitas
[MSN]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

é outra forma, mas é um pouco insegura. Qualquer usuário malicioso do sistema pode editar os inputs hidden que vc colocaria no formulário e mudar campos que vc não queria que fossem mudados.

--
Caelum
www.caelum.com.br

sun.freitas
Entusiasta Java
[Avatar]

Membro desde: 20/10/2009 14:33:18
Mensagens: 16
Offline

é vero!!!

SUN Freitas
[MSN]
 
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Ir para:   
Powered by JForum 2.1.8 © JForum Team