блокируется ли запись, когда на ней работает entitymanger? - PullRequest
1 голос
/ 06 января 2011

У меня есть транзакция, в которой используется один менеджер сущностей em1. Внутри этой транзакции я вызываю метод. Теперь этот метод создает еще один entitymanager em2. Теперь em2 оперирует некоторыми данными и возвращает один объект. Теперь этот объект заполняется значением одной строки из db. Обратите внимание, что em2 не закрыт. Somone еще реализовал этот API, и я просто использую его.

Теперь, если я пытаюсь удалить запись, возвращаемую em1, мой код зависает, а затем время ожидания. Это потому, что em1 заблокировал эту конкретную запись?

псевдокод выглядит следующим образом

start tx using em1
Obj a = newSomeobject().getdata(id);  //get data uses em2 and em2 is not closed.
// now  tx ties to update record returnd by getdata  and the code times out

Ответы [ 2 ]

0 голосов
/ 06 января 2011

В оптимистической транзакции не должно быть блокировки таких объектов.Очевидно, что проверка SQL, отправленного в СУБД, выявила бы любые операторы «SELECT ... FOR UPDATE» (или эквивалентные)

0 голосов
/ 06 января 2011

Если вы используете hibernate в EM, управляемой приложением, hibernate автоматически присоединит его к текущей транзакции, см. здесь .

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