Hibernate 锁定模式下我遇到的问题。是否在休眠状态下读取?
根据LockMode.READ:-此锁定模式下的对象在当前事务中从数据库中读取,而不是从缓存中提取 所以我尝试了下面的代码片段Hibernate 锁定模式下我遇到的问题。是否在休眠状态下读取?,hibernate,Hibernate,根据LockMode.READ:-此锁定模式下的对象在当前事务中从数据库中读取,而不是从缓存中提取 所以我尝试了下面的代码片段 Session session = sessions.openSession(); tx = session.beginTransaction(); person = (Person)session. get(Person.class,1);//Line1 session.lock(person, LockMode.READ);//Line2 person = (Per
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行,数据库查询被触发,因为我第一次在会话中获取person
根据上面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=?
编辑
现在在第2行,我看到又有一个查询被触发,它是从MyProject1中选择id?但它不会为id 1触发person查询,也不会在第2行和第3行获得更新的person值。不从数据库中再次读取它是完全正确的。行为与Javadoc一致。在代码中,第1行和第3行在同一事务中,因此在当前事务中仍然有效 嗨,米科。请参阅我编辑的文章。即使我正在进行另一个事务,仍然LockMode.read不会从数据库中获取值
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();