Resolvido: VRaptor + Hibernate - Update de Classe [RESOLVIDO]  XML
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Autor Mensagem
robertouba
JavaBaby
[Avatar]

Membro desde: 21/10/2009 23:41:28
Mensagens: 82
Localização: Jacutinga, Minas Gerais
Offline

Salve salve...
conforme me indicaram (@danielkist via Twitter) estou abrindo esse post...
Bom, primeiramente não domino nada de VRaptor, mas, o que me acontece é muito maluco!

Vamos lá...
Tenho uma classe usuário, que tem uma senha, por exemplo... e o endereço!




Bom, na hora re inserir eles em um banco, meu procedimento foi primeiramente criar um campo usuario.endereco.id, usuario.endereco.cep e etc...
não rolou na insersão... então coloquei mesmo os campos, criei o endereço setei ele para o usuário e estava feliz assim.....
Na hora do update o negócio foi muito macabro!

usuario.id
usuario.nome
usuario.endereco.id
usuario.endereco.cep

etc....
tudo lindo, mas no meu dao.update(usuario) ... ele criava novo endereço! kkkkkkkkkkkkkkkkkkkkkkkkkk
pior ainda, se no meu form eu tiver apenas usuario.senha (para trocar a senha do usuario) sem ter mais nenhum campo de usuario.endereco.id ele setava NULL no banco de dados para o endereço!...


Qual o procedimento!?
Tenho visto muitas coisas de Vraptor na net e meu, muito bom, mas, as falta muita coisa ainda, e lógico, um frame desse vai se espalhar muito rápido, entretanto algumas dúvidas pequenas para quem está começando permancessem...

This message was edited 2 times. Last update was at 02/07/2011 00:30:56



______________________________
[RoxF.]
[Email] [WWW] [MSN] [ICQ]
yorgan
GUJ Ranger
[Avatar]

Membro desde: 14/08/2006 19:41:31
Mensagens: 888
Localização: Floripa/SC
Offline

Opa,
Vamos começar.
Primeiro isso é uma questão do Hibernate e não do VRaptor.
Eu acredito que você esteja enviando a entidade para ser atualizada sem informar o ID.
Ou caso esteja enviando o ID, você não está definindo os valores antigos nela para que apenas os campos do form seja atualizado.
De qualquer forma, para ter certeza disso o ideal seria você colocar o código do JSP, do controller e do DAO.

[]'s
Daniel
[Email] [WWW]
robertouba
JavaBaby
[Avatar]

Membro desde: 21/10/2009 23:41:28
Mensagens: 82
Localização: Jacutinga, Minas Gerais
Offline

Vamos lá, Usuario DAO






Usuario Controller




Agora meu Form... o de adicionar



O Form de Editar.... Poutsss... Note que eu tive que passar a senha por hidden pq se eu não passasse ele deixava nulo! snifff
A mesma coisa acontecia se eu fizesse um form só com senha! deixava o endereço como nulo!




______________________________
[RoxF.]
[Email] [WWW] [MSN] [ICQ]
yorgan
GUJ Ranger
[Avatar]

Membro desde: 14/08/2006 19:41:31
Mensagens: 888
Localização: Floripa/SC
Offline

Então, acho que você pode resolver em 2 lugares.
Pode ser no DAO, com algo +/- assim:


Ou você pode fazer isso no Controller:


Se você fizer no DAO, vai ter que criar um método edit para cada formulário, porque cada formulário manda campos específicos.
Se você fizer no controller, pode deixar o edit como está e em cada método efetuar o procedimento que mostrei acima.

O que está acontecendo no seu caso:
Se você mandar um registro Usuario com apenas alguns campos preenchidos, o Hibernate entende que os demais campos devem ser zerados.
Fazendo da forma com que demonstrei, o hibernate vai comparar os valores e ver que em apenas alguns campos os valores são diferentes e irá atualizar apenas esses campos.


[]'s
Daniel

This message was edited 1 time. Last update was at 26/05/2011 11:26:36

[Email] [WWW]
robertouba
JavaBaby
[Avatar]

Membro desde: 21/10/2009 23:41:28
Mensagens: 82
Localização: Jacutinga, Minas Gerais
Offline

Vamos testar...


______________________________
[RoxF.]
[Email] [WWW] [MSN] [ICQ]
robertouba
JavaBaby
[Avatar]

Membro desde: 21/10/2009 23:41:28
Mensagens: 82
Localização: Jacutinga, Minas Gerais
Offline

Bom, acho que o negócio não deu certo, modifiquei minha classe, e está fazendo o update no usuário, mas se eu não colocar o campo do endereço, ele seta o endereço como nulo....
Vou postar as novas classes que fiz.....


Usuario DAO....




Usuario




Endereco





Formulario de Edição, quero alterar somente o nome



Por fim, o controller do Usuario





Por fim, mesmo que eu usasse, como sugerido pelo Daniel...



dessa mesma maneira ele perde a referencia dos campos que não estão no formulário, setando como null... ou seja, se eu quisesse um formulário apenas com senha, ele deixaria todos os outros campos como null.

This message was edited 1 time. Last update was at 26/05/2011 17:37:11



______________________________
[RoxF.]
[Email] [WWW] [MSN] [ICQ]
robertouba
JavaBaby
[Avatar]

Membro desde: 21/10/2009 23:41:28
Mensagens: 82
Localização: Jacutinga, Minas Gerais
Offline

Poxa, deu certo sim, apenas tinha me esquecido de reiniciar o Hibernate, e ele já tinha na memória o NULL no campo endereço!
Portanto, deu certinho conforme o Daniel falou...

Carregar o usuario, setar a informação e salvar no banco! Valew Dan!


______________________________
[RoxF.]
[Email] [WWW] [MSN] [ICQ]
 
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Ir para:   
Powered by JForum 2.1.8 © JForum Team