Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 锁定模式下我遇到的问题。是否在休眠状态下读取?_Hibernate - Fatal编程技术网

Hibernate 锁定模式下我遇到的问题。是否在休眠状态下读取?

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

根据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行,数据库查询被触发,因为我第一次在会话中获取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();