2012-02-18 8 views
13

¿Qué está pasando aquí?La entidad se debe administrar para llamar a eliminar

@Stateless 
@LocalBean 
public class AppointmentCommentDao { 
    public void delete(long appointmentCommentId) { 
     AppointmentComment ac = em.find(AppointmentComment.class, appointmentCommentId); 
     if (ac != null) 
     { 
      em.merge(ac); 
      em.remove(ac); 
     } 
    } 
    @PersistenceContext 
    private EntityManager em; 
} 

En la llamada a remove me sale un IllegalArgumentException con ser el mensaje Entity must be managed to call remove: ...., try merging the detached and try the remove again.

+0

lo resolvió con el método em.find (...). –

Respuesta

18

En la combinación de caso no es necesaria, porque de CA no está deattached en cualquier punto entre em.find y em .remove.

En general, cuando se deattached entidad, el método de EntityManager fusionar tiene entidad como argumento y rendimientos lograron ejemplo. La entidad dada como argumento no se transforma para ser adjuntada. Esto se explica, por ejemplo, aquí: EntityManager.merge. Tienes que ir a:

AppointmentComment toBeRemoved = em.merge(ac); 
    em.remove(toBeRemoved); 
+0

Extraño ... Sin ningún cambio en ese código (aunque hubo otros cambios no relacionados), misteriosamente comenzó a funcionar. Incluso eliminé la fusión porque la razón por la que la tuve fue porque estaba recibiendo esa excepción. No debería ser necesario porque la entidad debe adjuntarse mientras estamos en el mismo contexto de persistencia que la cargó. Algo más estaba sucediendo, creo. Stupid GlassFish. –

+0

Sin embargo, considero que se supone que se debe usar el objeto devuelto por la fusión en el futuro, no el objeto pasado. +1 –

+0

Tiene toda la razón, su código debería funcionar sin fusión, porque CA no está desacoplado en ningún punto. Primero asumí que era un ejemplo demasiado simplificado. Voy a actualizar la respuesta. –

6

Prueba esto:

entity = getEntityManager().getReference(AppointmentComment.class, entity.getId()); 
getEntityManager().remove(entity); 
Cuestiones relacionadas