Jpa ..duvida em deletar obejto

3 respostas
P

Não entendi porque da erro na hora de remove um objeto

???

alguem pode me dar um help porque não deleta o objeto…

abs

Erro=java.lang.IllegalArgumentException: Entity must be managed to call remove: br.com.exemplojpa.modelo.Usuario@1be16f5, try merging the detached and try the remove again.
Exception in thread "main" java.lang.IllegalStateException: 
Exception Description: No transaction is currently active
	at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.commit(EntityTransactionImpl.java:82)
	at oracle.toplink.essentials.internal.ejb.cmp3.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:45)
	at br.com.exemplojpa.persistencia.UsuarioDAO.removeUsuario(UsuarioDAO.java:124)
	at br.com.exemplojpa.negocio.UsuarioBusiness.removeUsuario(UsuarioBusiness.java:63)
	at br.com.exemplojpa.teste.TesteExemploJPA.main(TesteExemploJPA.java:81)

--main
// remove Usuario
		Usuario usuarioRemove = new Usuario();
		usuarioRemove.setId(14);
		Usuario usuarioRemoveV =usuarioBusiness.pesquisarUsuario(usuarioRemove);
		System.out.println("Nome Usuario Removido ="+usuarioRemoveV.getNome());
		System.out.println("Id Usuario Removido ="+usuarioRemoveV.getId());
		usuarioBusiness.removeUsuario(usuarioRemoveV);

---
public class UsuarioBusiness {

	UsuarioDAO usuarioDAO = null;

	/**
	 * Inserir usuário
	 */
	public void inserirUsuario(Usuario usuario) {

		usuarioDAO = new UsuarioDAO();

		usuarioDAO.inserirUsuario(usuario);

	}

	/**
	 * Pesquisar usuário
	 */
	public Usuario pesquisarUsuario(Usuario usuario) {

		usuarioDAO = new UsuarioDAO();

		Usuario retorno = new Usuario();

		retorno = usuarioDAO.pesquisarUsuario(usuario.getId(), usuario);

		return retorno;

	}
	
	/**
	 * Pesquisar usuário
	 */
	public List listaTodosUsuario() {

		usuarioDAO = new UsuarioDAO();

		List retorno = usuarioDAO.listaTodosUsuario();

		return retorno;

	}
	
	/**
	 * Remove usuário
	 */
	public void removeUsuario(Usuario usuario) {

		usuarioDAO = new UsuarioDAO();

		usuarioDAO.removeUsuario(usuario);

		

	}
}


--

public class UsuarioDAO {

	private EntityManagerFactory factory = null;

	private EntityManager manager = null;

	public UsuarioDAO() {
		factory = Persistence.createEntityManagerFactory("exemploJPA");
		manager = factory.createEntityManager();
	}

	/**
	 * Inserindo um usuário
	 * 
	 * @param usuario
	 */
	public void inserirUsuario(Usuario usuario) {

		EntityTransaction transaction = manager.getTransaction();

		try {
			transaction.begin();

			manager.persist(usuario);

			transaction.commit();
            
		} catch (Exception e) {
			transaction.rollback();

			System.err.println("Erro: " + e.getMessage());

		} finally {
			//manager.close();
		}

	}

	/**
	 * Pesquisar um usuário
	 * 
	 * @param usuario
	 */
	public Usuario pesquisarUsuario(Integer id, Usuario usuario) {
		EntityTransaction transaction = manager.getTransaction();

		Usuario retorno = null;

		try {

			transaction.begin();

			retorno = (Usuario) manager.find(Usuario.class, id);
			
		} catch (Exception e) {
			transaction.rollback();

			System.err.println("Erro: " + e.getMessage());
		} finally {
			transaction.commit();
			manager.close();
		}

		return retorno;

	}

	public List listaTodosUsuario(){
		EntityTransaction transaction = manager.getTransaction();
		
		List lista = new ArrayList(0);
		try{
			
			//1Query q = manager.createQuery("select u.id ,u.login ,u.password,u.nome from USUARIO u where u.id > 1");
			
			//lista = q.getResultList();
			
			//2Query q  = manager.createQuery("select object(u) from Usuario u where c.id > :cod" )
			//.setParameter("cod", "10");
			//lista = q.getResultList();
			
			 lista = manager.createQuery("select object(u) FROM Usuario u where u.id > " + 10).getResultList();   
		}catch(Exception e){
			System.out.println("Erro ="+e);
		}
		
		return lista;
	}
	
	public void removeUsuario(Usuario usuario){
		
		EntityTransaction transaction = manager.getTransaction();
		try{
		
			transaction.begin();
			manager.remove(usuario);
			System.out.println("Usuário removido com sucesso !!!!");
			
		}catch(Exception e){
			transaction.rollback();
			System.out.println("Erro="+e);
		}finally{
			transaction.commit();
		}
		
		
	}
}
--

3 Respostas

elugo
public void removeUsuario(Usuario usuario){   
           
        EntityTransaction transaction = manager.getTransaction();   
        try{   
           
            transaction.begin();   
            manager.remove(usuario);   
            System.out.println("Usuário removido com sucesso !!!!");   
               
        }catch(Exception e){   
            transaction.rollback();   
            System.out.println("Erro="+e);   
        }finally{   
            transaction.commit();   
        }   
           
           
    }

faltou o manager.getTransaction().commit(); depois do manager.remove(usuario);

P

fiz isso e funcionou …
coloquei no finally pra fechar a transação …

public void removeUsuario(Usuario usuario){
		
		EntityTransaction transaction = manager.getTransaction();
		try{
		
			transaction.begin();
			
			Usuario ur = manager.find(Usuario.class, usuario.getId());
			manager.remove(ur);
			
			System.out.println("Usuário removido com sucesso !!!!"+ ur.getId()+" "+ur.getNome());
			
		}catch(Exception e){
			transaction.rollback();
			System.out.println("Erro="+e);
		}finally{
			transaction.commit();
		}
		
		
	}
elugo

blz só que o transaction.commit() tem que ficar fora do finally
deve ser logo após seu remove pq se der algum erro ele vai fazer o rollback
mas se vc colocar no finaly mesmo se ele der o rollback vai fazer o commit ai não tem lógica…

Criado 28 de novembro de 2008
Ultima resposta 28 de nov. de 2008
Respostas 3
Participantes 2