-
- //瞬时对象
- Person person = new Person();
- Session session =sessionFactory.getCurrentSession();
- session.setName("liuzhao");
- session.save(person);
- //持久对象
- person.getName();
- session.close();
- Session session =sessionFactory.getCurrentSession();
- Transaction tx =session.beginTransaction();
- //加载持久对象
- Person person = session.load(Person.class,new Long(1));
- //变成瞬时对象
- session.delete(person);
- person.setName("caixj");
- //变成持久对象
- session.save(person);
- ...
- tx.commit()
- //脱管对象
- session.close();
Hibernate中通过session提供的不同方法,使Java对象在不同状态间互相转换,Hibernate中定义并支持以下对象状态:瞬时对象、持久对象和脱管对象。
一、瞬时对象
一般情况下被Java的new操作符创建的对象,称为瞬时对象。瞬时对象没有和任何数据库数据关联,如果接下来没有被持久化或者被其他的对象所引用,就会被JVM的GC所销毁。
只有在调用Hibernate session的持久化方法(save()、saveOrUpdate()等)才能把瞬时对象转变成持久对象。
Java代码
二、持久对象
持久对象定义为关联到数据库记录的对象实例,同时具有持久化标识,该标识将持久对象
和数据库记录关联。持久对象调用delete()方法就会转换成瞬时状态,调用close()、clear
()等方法将转换成脱管状态。
Java代码
三、脱管对象
脱管对象是持久对象的延续,此时的对象状态已经不被Hibernate Session 说管理,对象属性和数据库记录不再保持同步。
在脱管状态下,应用程序对脱管对象的引用依然有效,对象可以继续被修改。在正常情况下,不需要我们显示地进行对象转换,因为Hibernate session被关闭的时候,对象就自动变为脱管对象了。如果需要显示地调用的话,可以调用evict()方法,不过该方法主要是用在Hibernate的缓存管理中。