Olá estou fazendo um formulario seguindo a apostila do vraptor mas tive o seguinte problema:
Quando eu mando atualizar o campo no banco se o mesmo estiver null ele da o update setando como null no banco como faço para que ele só altere os campos que tiverem algo dentro ?
Não sei como está fazendo, mas será que assim não resolve?
if (! campo == null ){
campo.update();
}
Carrega o objeto do banco, e da um set nos atributos que voce alterou.
não resolve pq o campo em questão não é carregado no Formulario eu seto ele por tras dos panos então se eu disser que el é null ele nunca vai dar o update…
O ideal seria se o hibernate só atualizasse os campos que não fossem null
Como voce pega o objeto do formulario ?
No meu caso uso Struts 1, e seto um objeto no mesmo, depois uso DynaActionForm formularioObjeto,
Depois o Objeto em java, ObjetoTO objeto = fomularioObjeto.get(“objeto”);
Se voce nao estiver usando struts 1 nem copie esse codigo 
Como voce pega um objeto do formulario ?
[quote=rof20004]Como voce pega o objeto do formulario ?
No meu caso uso Struts 1, e seto um objeto no mesmo, depois uso DynaActionForm formularioObjeto,
Depois o Objeto em java, ObjetoTO objeto = fomularioObjeto.get(“objeto”);
Se voce nao estiver usando struts 1 nem copie esse codigo 
Como voce pega um objeto do formulario ?[/quote]
segui sua linha de raciocínio…
Recuperei o dado ja salvo no banco mas o hibernate me deu essa excessão:
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [br.com.wrk.model.Empreendedor#1]
Meu Código esta assim:
if (empreendedor.getEstado().equals("Selecione")) {
empreendedor.setEstado(dao.carrega(empreendedor.getId()).getEstado());
}
dao.salva(empreendedor);
se eu retiro o if ele grava o Selecione no lugar do estado se eu coloco ele ele da a excessão 
a different object with the same identifier value was already associated with the session
Isso quer dizer que voce esta setando 2 objetos para persistir na base de dados.
Desfaz todos os objetos criados, vamo comecar do zero:
- Crie um objeto que pega os dados do banco, de acordo com o ID que vem do formulario.
- Pegue o objeto do form.
- Sete outro objeto com os dados que vem DO FORM.
- Integer idQuevemDoFormulario = Integer.valueOf(request.getAttribute(“idObjeto”).toString());
- ObjetoTO objetoQueVaiPersistir = objetoDAO.getPorId(idQuevemDoFormulario);
- DynaActionForm objetoForm = new DynaActionForm();
- ObjetoTO objetoNew = objetoForm.get(“objeto”);
- Agora sete as mudancas no objetoQueVaiPersistir (Ele que abriu uma session com o banco, entao ele que tem que ser persistido, entendeu agora o porque do erro ?)
// Aqui voce vai setar SOMENTE as variaveis que voce alterou. Geralmente os campos da alteracao sao pre-definidos no formulario, entao so setar os mesmo.
// Por exemplo, o meu objeto tem N variaveis, mas no form de alteracao so altero 2. Nome e Endereco.
- objetoQueVaiPersistir.setNome(objetoNew.getNome());
- objetoQueVaiPersistir.setEndereco(objetoNew.getEndereco());
Se voce tiver definido as variaveis no struts nem precisa setar outro objeto com os dados do form, pode usar o request.getAttribute diretamente no objetoQueVaiPersistir, exemplo: objetoQueVaiPersistir.setNome(request.getAttribute(“nome”).toString());
Por ultimo: objetoDAO.UPDATE(objetoQueVaiPersistir);
Tendeu ?