Проблема, которую я получаю во время LockMode.READ в спящем режиме? - PullRequest
0 голосов
/ 28 ноября 2011

Согласно LockMode.READ:- Объекты в этом режиме блокировки считывались из базы данных в текущей транзакции, а не извлекались из кэша.

Итак, я попробовал приведенный ниже фрагмент кода

Session session = sessions.openSession();
tx = session.beginTransaction();
person = (Person)session. get(Person.class,1);//Line1
session.lock(person, LockMode.READ);//Line2
person = (Person)session. get(Person.class,1);//Line3

В строке 1 запрос к базе данных был запущен, когда я впервые получаю сообщение о сеансе.

Согласно определениюLockMode.READ выше, я ожидал, что запрос к базе данных также будет запущен в строке 3.Но это не так - почему?

Просто для информационного запроса, который был запущен в строке 1, это

Select person0_.id as id0_1_, person0_.cname as cname0_1_, 
person0_.addressId1 as addressId3_0_1_, address1_.id as id1_0_, address1_.personId 
as personId1_0_, address1_.addressLine1 as addressL3_1_0_ from MyProject1.Person 
person0_, MyProject1.Address address1_ where person0_.addressId1=address1_.id(+) 
and person0_.id=?

РЕДАКТИРОВАТЬ

Session session = sessions.openSession();
tx = session.beginTransaction();
person = (Person)session. get(Person.class,1);
tx.commit();
session.close();



Session session = sessions.openSession();
tx = session.beginTransaction();
person = (Person)session. get(Person.class,1);//Line1
session.lock(person, LockMode.READ);//Line2
person = (Person)session. get(Person.class,1);//Line3
tx.commit();
session.close();

Теперь в строке 2 я вижу, что был запущен еще один запрос , который выбирает id из MyProject1.Person, где id =? , но он не запускает запрос person для id 1 и не получает обновленное значение personни в строке 2, ни в строке 3

1 Ответ

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

Это прекрасно, чтобы не читать его из базы данных снова. Поведение соответствует Javadoc. В вашем коде Line1 и Line3 находятся в одной и той же транзакции, поэтому "в текущей транзакции" сохраняется.

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