Hibernate - removendo objeto

4 respostas
R

Hi.
Gostaria de saber se é possivel remover um objeto dessa maneira:

public class TimesheetMBean{
    @EJB
    private TimesheetFacade timesheetFacade;

    public void deleteTimesheet(){
        Timesheet timesheet = new Timesheet();
        timesheet.setPkTimesheet(pkTimesheetSelected);
        timesheetFacade.remove(timesheet);
    }
}

//Método no repositorio usado pelo façade

protected EntityManager em;

    public void remove(T entity){
        em.remove(entity);
    }

O erro que acontrece é o seguinte:
Caused by: java.lang.IllegalArgumentException: Removing a detached instance org.iprogramming.model.entity.Timesheet#4
at org.hibernate.ejb.event.EJB3DeleteEventListener.performDetachedEntityDeletionCheck(EJB3DeleteEventListener.java:45)

Alguem pode me ajudar ?

4 Respostas

kaique

Cara, não saco muito de EJB 3, mas pelo que eu entendi você está tentando remover um objeto que está no estado DETACHED, ou seja, não possui ligação com os registros da sua base de dados. Tente sincronizar esse objeto com a base de dados antes de executar o método de remover…

[]'s.

andreiribas

você tem que fazer um get no objeto da chave primária para pegar o objeto do banco de dados antes de remover:

public void remove(T entity){  
    entity = em.get(Timesheet.class, entity.getPkTimesheet());
    em.remove(entity);
   
}
R

kaique:
Cara, não saco muito de EJB 3, mas pelo que eu entendi você está tentando remover um objeto que está no estado DETACHED, ou seja, não possui ligação com os registros da sua base de dados. Tente sincronizar esse objeto com a base de dados antes de executar o método de remover…

[]'s.


Como é feita essa ligação ? O que seria essa sincronização ?

dreampeppers99

ronildobraga:
Hi.
Caused by: java.lang.IllegalArgumentException: Removing a detached instance org.iprogramming.model.entity.Timesheet#4
at org.hibernate.ejb.event.EJB3DeleteEventListener.performDetachedEntityDeletionCheck(EJB3DeleteEventListener.java:45)

O erro acontece (provavelmente) porque a entidade está fora do contexto de gerenciada (managed), para resolver tente:

  1. protected EntityManager em;
  2. public void remove(T entity){
  3. em.merge(entity); em.remove(entity);
    
  4. }
Criado 7 de fevereiro de 2008
Ultima resposta 7 de fev. de 2008
Respostas 4
Participantes 4