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) 收藏 举报