обработка исключений CMP параллелизма jpa - PullRequest
2 голосов
/ 16 ноября 2011

Я использую EntityManager для сохранения / обновления своих сущностей в базе данных и Hibernate в качестве провайдера jpa.Мои транзакции обрабатываются контейнером.

Проблема: мне нужно добавить объект, который, возможно, уже был сохранен в базе данных, поэтому будет выдано исключение.В этом случае мне нужно повторить вставку, но с другим значением.Но до тех пор, пока выдается исключение, сеанс не работает, и мне нужно создать новый сеанс и откатить транзакцию.Как я могу сделать это, когда я использую CMT?Или есть ли другой способ сделать это?

Спасибо.

Ответы [ 2 ]

1 голос
/ 16 ноября 2011

Вы можете использовать TransactionAttribute(REQUIRES_NEW) для вашего метода постоянства.Если компонент, вызывающий ваш метод, поймает исключение, он может внести некоторые изменения и снова вызвать метод.
Это приведет к откату только транзакции с использованием метода постоянства, а не транзакции вызывающего компонента.помните, что если ваш вариант использования не требует от вас EntityManager#persistence(-), вас может заинтересовать EntityManager#merge(-) операция.Он сохранит сущность, если она еще не существует, или обновит , если она уже существует (существование проверяется на основе PK).

0 голосов
/ 16 ноября 2011

Возможно, вы захотите использовать EntityManager # find (Class, PK) для проверки уже сохраненной сущности.Нулевой результат означает, что такой сущности нет (----> persist (.)), В противном случае вы обновите метод merge (.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...