2011-01-06 3 views
1

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

Теперь, если я попытаюсь удалить запись, возвращенную 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 
+0

Почему никто не отвечает? – akshay

+0

@ DataNucleus: я приложил все ответы на предыдущие вопросы. Я не знал, что я должен принять ответы. Новое на этом сайте – akshay

+0

ждет ответов – akshay

ответ

0

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

+0

am usin open jpa as jpa provider – akshay

0

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

Смежные вопросы