У меня есть два метода, один из которых хранит объект сущности (объектный компонент EntityClass1), используя .persist(), передающий идентификатор EntityClass1, а другой отвечает за удаление объекта сущности с тем же идентификатором.
У меня есть конфигурация, в которой я вызываю в третьем методе (в другом классе) оба:
1) метод выше, который выполняет .persist() и
2) метод, который выполняет .remove() (таким образом, действуя на тот же объект сущности - тот же идентификатор), после выполнения некоторого кода, если что-то пойдет не так.
Первая операция проходит правильно (я продолжаю). В случае выполнения метода, который выполняет удаление одного и того же объекта сущности из базы данных, когда я получаю доступ к удаляемому объекту с помощью EntityManager.find(), этот последний метод возвращает NULL. КАК ЭТО ВОЗМОЖНО?? Я уверен, что сохранил этот объект.
Я уверен, что использовал необходимое для управления транзакциями (в контексте CMT): в каждом из двух методов я создаю объект EntityManager из аннотированного (@PersistenceUnit) EntityManagerFactory, управляя механизмом транзакций с TRY-CATCH контекста CMT. -FINALLY блок, в теле которого FINALLY я закрываю объект EntityManager (в теле TRY которого я выполняю .persist() и .remove() соответственно для двух вышеперечисленных методов).
Таким образом, в моем методе удаления я не могу получить объект для удаления, даже если он только что был сохранен с помощью моего метода вставки. В чем может быть проблема?
Может ли быть какая-то причина, из-за которой этот объект был удален?
Я новичок в JavaEE-JPA-JTA. Большое спасибо.
[EDIT]: я исправил некоторые из этих проблем. Тот em.find(), который ранее возвращал null, ТЕПЕРЬ ВОЗВРАЩАЕТ МОЙ РАЗЫСКИВАЕМЫЙ ОБЪЕКТ. Я только что изменил свой код, чтобы использовать единственный менеджер объектов (комментарии @Jaspreet заставили меня заметить это), и мне пришлось изменить управление транзакциями CMT (не нужно было использовать этот блок TRY-CATCH-FINALLY). Вы можете увидеть JPA - странное поведение при использовании метода EntityManager remove(). Хотя в этом новом обсуждении я разместил новые вопросы.