Операция «Удалить» на отдельных объектах - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть вопрос об операции удаления на отсоединенных объектах.

Согласно спецификации "Если X является отсоединенным объектом, операция удаления выдает исключение IllegalArgumentException (или фиксация транзакции завершится неудачно). "

Но операция удаления может быть действительной для отсоединенного объекта.Рассмотрим следующий сценарий для контекста персистентности в области транзакции:

1) Объект сохраняется в базе данных в транзакции T1.Так что становится отстраненным.2) Для этого отсоединенного объекта в транзакции T2 сделан вызов на удаление.

Поскольку объект существует в базе данных, вызов на удаление должен быть действительным, и объект должен быть удален из базы данных в результате транзакции T2,Но согласно спецификации, исключение должно быть выдано при удалении, или фиксация транзакции должна завершиться неудачей.

Я что-то здесь упустил?в чем причина?

1 Ответ

4 голосов
/ 13 декабря 2011

detached entities - это non managed entities, и вы пытаетесь удалить неуправляемую сущность. Если вы хотите удалить ее, вам нужно сделать это в managed state. или еще один способ - найти ссылки на отдельную сущность и попытаться удалить.

getEntityManager().getReference("detached");
remove("reference");

Я не уверен насчет приведенной выше строки, но вы можете попробовать.

...