Я знаю, что должен слить сущность, прежде чем удалить ее
Не совсем. Объект, переданный для удаления, должен быть сущностью и не должен быть отделен. Это другое.
но я никогда не думал, что должен делать это внутри EJB. Сначала у меня есть эти (...)
Посмотрим, что вы делаете:
1: e = (Event) scholarBean.merge(e);
2: scholarBean.remove(e);
Таким образом, в 1:
вы вызываете EJB (очень вероятно, с контекстом персистентности в области транзакции), который объединяет сущность. Но затем метод завершается, транзакция фиксируется, контекст постоянства закрывается, и возвращаемая сущность снова отключается .
И в 2:
вы передаете (все еще) отсоединенную сущность в EJB и пытаетесь remove
ее, что недопустимо. И KaBOOM!
Итак, я привожу эти две строки в свой сессионный компонент, и это работает. Есть идеи почему?
Это работает, потому что вы сейчас работаете в рамках контекста постоянства, связанного с транзакцией JTA, и, таким образом, вы действительно передаете управляемую сущность remove
.