[Resolvido] Contexto de persistência

4 respostas
charlesbraw

Galera,

Mais um teste aqui na especificação EJB/JPA.

Seguinte,

Um obeto/entidade que ainda não está gerenciado pelo contexto deve receber um erro ao tentar executar uma operação do tipo merge, ok?

Segue um exemplo do teste (mais uma vez, código cheio de “marreta”, só pra teste hehehe)

public class ClienteServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	@EJB
	private ClienteBean clienteBean;
	
	
	@PersistenceContext(unitName=Constantes.JNDI.Persist.VENDA)
	private EntityManager entityManager;
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		Cliente cliente = new Cliente();
		cliente.setNome("charles");
		
		cliente.setAltura(999);
		clienteBean.alterar(cliente);
	}
}

Método ejb:

public void alterar(Cliente cliente) {
		cliente.setAltura(871);
		cliente.setId(1L);
		entityManager.merge(cliente);
	}

Ao chamar esse método não deveria tomar uma exceção? porque o cliente não está sendo gerenciado.
Criei ele no servlet, alterei no ejb e momento nenhum fiz “coloquei” ele no contexto, porque atualiza sem erro?

vlws.

4 Respostas

Hebert_Coelho

Um objeto ñ precisa estar attached para sobre um merge.

Imagine que uma pessoa do id = 1 e se você fizer

Pessoa pessoa = new Pessoa(1);

em.merge(pessoa)

Todos os outros dados já persistidos serão apagados.

charlesbraw

Verdade Hebert,
Acho que me confundi com a questão de estar gerenciado.
Fiz o teste aqui e rolou bem isso mesmo.

Achei que o merge só deveria funcionar se a entidade já estivesse gerenciada. (através de um find por exemplo).

vlws.

Hebert_Coelho

Isso é verdade na hora do delete. [=

charlesbraw

Verdade, nesse caso recebemos a

java.lang.IllegalArgumentException: Removing a detached instance

Criado 17 de março de 2013
Ultima resposta 17 de mar. de 2013
Respostas 4
Participantes 2