Update do Hibernate

Pessoal to tentando usar o update do Hibernate para atualizar uma entrada na minha tabela, contudo, alem de alterar os valores da linha para o correto, ele, por algum motivo, esta duplicando esta linha, ou seja, alem de dar update na linha que eu queria ele tah criando outra entrada exatamente igual (alterando somente a chave primaria), ag sabe o que pode ser?

	public void salvar(String nomeAntigo, String nomeNovo, String ativo, String menuRaiz) throws RNException{
		SubMenu subMenu= new SubMenu();
		SubMenuRN subMenuRN = new SubMenuRN();
		subMenu = subMenuRN.getSubMenuPeloNome(menuRaiz); 
		
		
		Menu menu = new Menu();
		menu = this.menuDAO.getMenuPeloNome(nomeAntigo); //aqui pego o valor atual da linha/objeto no BD
		
		menu.setNome(nomeNovo);
		menu.setIdSubmenu(subMenu);
		
		if(ativo.equals("Sim"))		
			menu.setAtivo(true);
		else
			menu.setAtivo(false);
		
		System.out.println(menu.getIdSessao());
		
		this.menuDAO.update(menu);
		
	}
	public void update(Menu menu) {
		
		System.out.println(menu.getIdSessao());
		
		this.session.update(menu);
		
	}
  1. Pra que isso?Menu menu = new Menu(); menu = this.menuDAO.getMenuPeloNome(nomeAntigo); //aqui pego o valor atual da linha/objeto no BDPq não? Menu menu = menuDAO.getMenuPeloNome(nomeAntigo); //aqui pego o valor atual da linha/objeto no BD
  2. Quando o objeto volta do DB, ele tem valor no ID?

[quote=jakefrog]1) Pra que isso?Menu menu = new Menu(); menu = this.menuDAO.getMenuPeloNome(nomeAntigo); //aqui pego o valor atual da linha/objeto no BDPq não? Menu menu = menuDAO.getMenuPeloNome(nomeAntigo); //aqui pego o valor atual da linha/objeto no BD
[/quote]

No trabalho, onde programo em C++, eh norma instaciar os objetos no inicio dos metodos (nao sei pq diabos), ai acabo ficando com a mania de fazer isso nos meus projetos pessoais (no trabalho fica mais bonitinho e organizado :p)

Sim, ele tah com o id correto, mas sei lah pq ele tah criando outra entrada, to debugando o codigo (que tem uns trechos feitos por um amigo) para ver c nao tem “coisa estranha” lah pra frente …

Bem, tome cuidado. 1) vc está alocando memória atoa. 2) isso pode ser ponto negativo em entrevistas 3) não é boa prática.
4) o hibernate/jpa trabalha com referências. Ele pode está se perdendo aí, ou então no método que retorna o objeto ou em algum outro lugar.

Boa sorte aí.

habilita o show_sql do hibernate no hibernate.cfg.xml e ver o sql que está sendo gerado, ou coloca um breakpoint e tenta ver o que está acontecendo. Apenas olhando o código acima n dar pra dizer extamente o motivo.