`
zhangziyueup
  • 浏览: 1170248 次
文章分类
社区版块
存档分类
最新评论

hibernate 持久化对象

 
阅读更多

    1. //瞬时对象
    2. Personperson=newPerson();
    3. Sessionsession=sessionFactory.getCurrentSession();
    4. session.setName("liuzhao");
    5. session.save(person);
    6. //持久对象
    7. person.getName();
    8. session.close();
    1. Sessionsession=sessionFactory.getCurrentSession();
    2. Transactiontx=session.beginTransaction();
    3. //加载持久对象
    4. Personperson=session.load(Person.class,newLong(1));
    5. //变成瞬时对象
    6. session.delete(person);
    7. person.setName("caixj");
    8. //变成持久对象
    9. session.save(person);
    10. ...
    11. tx.commit()
    12. //脱管对象
    13. session.close();

    Hibernate中通过session提供的不同方法,使Java对象在不同状态间互相转换,Hibernate中定义并支持以下对象状态:瞬时对象、持久对象和脱管对象。

    一、瞬时对象

    一般情况下被Javanew操作符创建的对象,称为瞬时对象。瞬时对象没有和任何数据库数据关联,如果接下来没有被持久化或者被其他的对象所引用,就会被JVM的GC所销毁。

    只有在调用Hibernate session的持久化方法(save()、saveOrUpdate()等)才能把瞬时对象转变成持久对象。

    Java代码

    二、持久对象

    持久对象定义为关联到数据库记录的对象实例,同时具有持久化标识,该标识将持久对象

    和数据库记录关联。持久对象调用delete()方法就会转换成瞬时状态,调用close()、clear

    ()等方法将转换成脱管状态。

    Java代码

    三、脱管对象

    脱管对象是持久对象的延续,此时的对象状态已经不被Hibernate Session 说管理,对象属性和数据库记录不再保持同步。

    在脱管状态下,应用程序对脱管对象的引用依然有效,对象可以继续被修改。在正常情况下,不需要我们显示地进行对象转换,因为Hibernate session被关闭的时候,对象就自动变为脱管对象了。如果需要显示地调用的话,可以调用evict()方法,不过该方法主要是用在Hibernate的缓存管理中。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics