Сущность должна быть в состоянии вызвать удалить - PullRequest
13 голосов
/ 18 февраля 2012

Что здесь происходит?

@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;
}

При звонке на remove я получаю IllegalArgumentException с сообщением Entity must be managed to call remove: ...., try merging the detached and try the remove again.

Ответы [ 2 ]

18 голосов
/ 18 февраля 2012

В вашем случае слияние не требуется, потому что переменная не отключена ни в одной точке между em.find и em.remove .

Обычно, когда сущность отсоединена, метод EntityManager merge принимает сущность в качестве аргумента и возвращает управляемый экземпляр .Сущность, заданная в качестве аргумента, не преобразуется для присоединения.Это объясняется, например, здесь: EntityManager.merge .Вы должны пойти на:

    AppointmentComment toBeRemoved = em.merge(ac);
    em.remove(toBeRemoved);
6 голосов
/ 14 декабря 2012

Попробуйте это:

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