2011-06-01 82 views
3

我在Hibernate中有一些简单的查询。休眠会话如何工作

  1. 如果我假设有两个实例在运行,并且每个实例都使用它自己的休眠会话。如果一个会话将数据插入到数据库中,而第二个会话尝试检索新数据,它是否能够获取该数据?

  2. 我已经设置了由DB序列生成的主键。 所以我创建一个实例并调用save(),但不要提交事务。我仍然能够获得该实例的ID。当时是否有数据库调用发生,或者hibernate如何维护其会话?

回答

2
  1. 是,一旦数据被提交到数据库;这取决于在交易上配置的isolation level

  2. 是的,它会像select nextval('MY_SEQUENCE');这样会设置为实体的id;所以,即使事务还没有提交,你也有一个id。

This article值得一读。

+1

第1点的答案还应该提到隔离级别,比如read uncommitted。即使事务尚未提交,但如果隔离级别允许其他人查看中间更改,我认为这些更改可能是可见的。 – 2011-06-01 07:36:46

+0

好点;我已经添加了一个描述这个的链接。然而,默认情况下,隔离级别是Read Committed,这意味着事务A不能读取事务B尚未提交的值。 – 2011-06-01 07:54:34

+0

非常感谢许多人......这些链接真的有用 – Satya 2011-06-13 09:22:50