和数据库关联的对象有三种状态:瞬时,持久,脱管。
瞬时:在数据库中还没有与该对象关联的记录,仅仅是一个普通的对象而已,超过作用域,就会被回收。一般都是new出来的对象,并且还没有与session建立联系。
持久:与session建立了联系(session.save(obj)),并且在数据库中已经有了和该对象关联的记录, session没有关闭。
持久态的对象发生改变有两种情况:
1) session没有关闭,事务没有提交,此时对象发生改变(setXX)。hibernate会检测到,当事务进行提交时,改变将保存到数据库中。
2) session没有关闭,事务已经提交,此时对象发生改变,hibernate会检测到,但要想将改变的数据保存到数据库中,session须重新打开一个事务。
脱管:数据库中已有记录和这个对象对应,但是当前已经和session失去了关联,此时,若对象发生改变,不会影响到数据库。
更多详细内容可以参看:http://www.java3z.com/cwbwebhome/article/article8/h3.html