Согласно 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