JPA - merge

10 respostas
anderson.bonavides

Pessoal estou com o seguinte problema. Quando dou um merge o usuario não é atualizado e sim é inserido um novo usuario com quase todas as informações identicas. Exceto com as modificações que eu coloquei.
Meu método está correto?

public void editarUsuario(Usuario usuario) { EntityTransaction transaction = manager.getTransaction(); try { transaction.begin(); manager.merge(usuario); transaction.commit(); } catch (Exception e) { transaction.rollback(); System.err.println("Erro: " + e.getMessage()); } finally { manager.close(); } }

Grato.

10 Respostas

Jair_Rillo_Junior

Apenas um palpite…
O Atributo que é a chave primaria da tabela está igual no objeto Usuario que você passou para o método?

anderson.bonavides

O usuário que eu pesquiso é o mesmo que eu insiro.

pablofaria

tenta manter a mesma transação aberta para perquisar no instante do merge…

Cabazzo

Vc deu um “find” antes? Pq isso acontece quando o EntityBean não está sendo “gerenciado” pelo EntityManger. isto é está desacoplado. Tente colocar um em.flush(); depois do merge.

anderson.bonavides

Oi pessoal obrigado pelas dicas. Na verdade percebi que não estava tendo id nenhum. O merge estava funcionando como um comit. Pessoal podem me indicar alguma outra solução?
E meio urgente.
Fico muito agradecido a vocês pela ajuda com minha duvida.
Obrigado.

public void editarUsuario(Usuario usuario, String email) {
		EntityTransaction transaction = manager.getTransaction();
		Usuario aux;
		try {
			transaction.begin();
			Query query = manager.createQuery("SELECT u FROM Usuario u WHERE u.email = :email");
			query.setParameter("email", email);
			aux = (Usuario) query.getSingleResult();
			
			
			manager.merge(usuario);
			transaction.commit();
		} catch (Exception e) {
			transaction.rollback();
			System.err.println("Erro: " + e.getMessage());
		} finally {
			manager.close();
		}
	}
renatocustodio

De qualquer forma vc tem que fazer ela chegar aí com algum id!

Isso é algo web? Ta usando algum framework?

anderson.bonavides

É web e to fazendo no braço. Uso o Jboos Tools para fazer as tags do jsf.

marciocamurati

Para atualizar os dados desse usuário você fez um find e exibiu ele na tela para alterar os dados correto? Você só precisa manter alem dos campos input com os dados editáveis um com esse id um hidden por exemplo, e passar ele junto com os demais dados para sua camada de Business.

[]s

anderson.bonavides

Obrigado marcio vou procurar aki como se faz um hidem no jsf. Eu pessoalmente não sei.

Grato.

:wink:

anderson.bonavides

marciocamurati

Obrigado. O hiden com o id funcionou muito bem.

:wink:

Grato.

Criado 28 de maio de 2008
Ultima resposta 29 de mai. de 2008
Respostas 10
Participantes 6