JPA JTA - использование EntityManager.persist () и EntityManager.remove () в одном и том же объекте сущности (один и тот же атрибут идентификатора сущности) - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть два метода, один из которых сохраняет объектный объект (объектный компонент EntityClass1) с помощью .persist (), передающий идентификатор EntityClass1, а другой отвечает за удаление объекта с таким же идентификатором.

У меня есть конфигурация, в которой я вызываю в третьем методе (в другом классе) оба:

1) метод выше, который выполняет .persist () и

2) метод, которыйвыполняет .remove () (то есть, действуя на тот же объект сущности - тот же идентификатор), после выполнения некоторого кода, если что-то пойдет не так.Когда происходит выполнение метода, который выполняет удаление того же объекта сущности из базы данных, когда я получаю для извлечения объекта для удаления с помощью EntityManager.find (), этот последний метод возвращает NULL.КАК ЭТО ВОЗМОЖНО??Я уверен, что сохранил этот объект.

Я уверен, что использовал все необходимое для управления транзакциями (в контексте CMT): в каждом из двух методов я создаю объект EntityManager из (@PersistenceUnitаннотированный) EntityManagerFactory, управляющий механизмом транзакций с помощью блока TRY-CATCH-FINALLY контекста CMT, в теле которого FINALLY я закрываю объект EntityManager (в теле которого TRY я выполняю .persist () и .remove () соответственно для двухметоды выше).

Итак, в моем методе удаления я не могу получить объект для удаления, даже если он только что был сохранен с помощью моего метода вставки.В чем может быть проблема?

Может быть, есть причина, по которой этот объект был удален?

Я новичок в JavaEE-JPA-JTA.Большое спасибо.

[ РЕДАКТИРОВАТЬ ]: я исправил некоторые из этих проблем.Тот em.find (), который ранее возвратил ноль, СЕЙЧАС ВОЗВРАЩАЕТ МОЙ ПОЛЕЗНЫЙ ОБЪЕКТ.Я просто изменил свой код, чтобы использовать один менеджер сущностей (комментарии @Jaspreet заставили меня это заметить), и мне пришлось изменить управление транзакциями CMT (не нужно было использовать этот блок TRY-CATCH-FINALLY).Вы можете увидеть JPA - странное поведение при использовании метода удаления EntityManager .Хотя в этой новой дискуссии я опубликовал новые номера.

...