持久化对象的生命周期

来源:互联网 发布:c语言符号表 编辑:程序博客网 时间:2024/06/06 01:24

先来看一下持久化对象生命周期的图:
   
应用程序运行过程中,系统使用对象的方式对数据库进行操作,这必然会产生一系列的持久化类的实例对象。为了区分这些对象,我们根据对象和当前会话的关联状态,可以分为三种情况。

 

三种状态的的对象:
  1.暂停对象(Transient Object)
    对象刚刚建立,还没有使用Hibernate进行保存。
    该对象在数据库中没有记录,也不在session缓存中。
    如果该对象是自动生成主键,则该对象的对象标识符为空。

 

  2.持久化对象(Persistent Object)
    对象已经通过Hibernate进行了持久化。
    数据库中已经存在对应的记录,且在session缓存中。
    如果该对象是自动生成主键,则该对象的对象标识符已被赋值。
   
  3.离线(脱管)对象(Detached Object)
    该对象是经过Hibernate保存过或者从数据库中取出的,但是与之关联的session已经被关闭。
    数据库中已经存在对应的记录,但不在session缓存中。
    如果该对象是自动生成主键,则该对象的对象标识符已被赋值。
    

  代码示例(通过下面的示例,了解一下各个状态都处于什么时刻):

public void testSave1() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();//Transient状态User user = new User();user.setName("张三");user.setPassword("123");//Persistent状态session.save(user);tx.commit();}catch(Exception e) {e.printStackTrace();if (tx != null) {tx.rollback();}}finally {HibernateUtils.closeSession(session);}//detached状态}


 

  

原创粉丝点击