hibernate开发之二:三种状态的变化及判断条件

与数据库里有没有这种记录  与session有没有关系 

 

new user  临时(瞬时)----数据中里没有记录,与session也没有关系

session.save(user) and commit(如果用到事务)时 --user为:持久化   ----数据中里有记录,session也没有关掉!

sesion.close()---user为:游离(也叫脱管)只是不会更新数据库了,但在内存中还是存在的-----数据里有记录,但session关掉了,所有这个时候可以调用update方法来更新数据,这时又变成持久化

如果不知道是何种状态时用:saveOrUpdate它会自动依据Id是不是有这种值来操作,这时变成了持久状态!

 总结:一般都用事务,这样可以减少与数据库打交道的机会

瞬态(transient)

该实例从未与任何持久化上下文关联过。它没有持久化标识(相当于主键)。

持久(persistent)

实例目前与某个持久化上下文有关联。 它拥有持久化标识(相当于主键),并且可能在数据库中有一个对应的行。 对于某一个特定的持久化上下文,Hibernate保证持久化标识与Java标识(其值代表对象在内存中的位置)等价。

脱管(detached)

实例曾经与某个持久化上下文发生过关联,不过那个上下文被关闭了, 或者这个实例是被序列化(serialize)到这个进程来的。 它拥有持久化标识,并且在数据库中可能存在一个对应的行。 对于脱管状态的实例,Hibernate不保证任何持久化标识和Java标识的关系。 

 

 

 

posted on 2013-01-13 09:59  peter.peng  阅读(283)  评论(0)    收藏  举报