3
我在Hibernate中有一些简单的查询。休眠会话如何工作
如果我假设有两个实例在运行,并且每个实例都使用它自己的休眠会话。如果一个会话将数据插入到数据库中,而第二个会话尝试检索新数据,它是否能够获取该数据?
我已经设置了由DB序列生成的主键。 所以我创建一个实例并调用save(),但不要提交事务。我仍然能够获得该实例的ID。当时是否有数据库调用发生,或者hibernate如何维护其会话?
我在Hibernate中有一些简单的查询。休眠会话如何工作
如果我假设有两个实例在运行,并且每个实例都使用它自己的休眠会话。如果一个会话将数据插入到数据库中,而第二个会话尝试检索新数据,它是否能够获取该数据?
我已经设置了由DB序列生成的主键。 所以我创建一个实例并调用save(),但不要提交事务。我仍然能够获得该实例的ID。当时是否有数据库调用发生,或者hibernate如何维护其会话?
是,一旦数据被提交到数据库;这取决于在交易上配置的isolation level
是的,它会像select nextval('MY_SEQUENCE');
这样会设置为实体的id;所以,即使事务还没有提交,你也有一个id。
This article值得一读。
第1点的答案还应该提到隔离级别,比如read uncommitted。即使事务尚未提交,但如果隔离级别允许其他人查看中间更改,我认为这些更改可能是可见的。 – 2011-06-01 07:36:46
好点;我已经添加了一个描述这个的链接。然而,默认情况下,隔离级别是Read Committed,这意味着事务A不能读取事务B尚未提交的值。 – 2011-06-01 07:54:34
非常感谢许多人......这些链接真的有用 – Satya 2011-06-13 09:22:50