第一节:Hibernate 中四种对象状态
![](https://images2017.cnblogs.com/blog/1050478/201707/1050478-20170728225041758-1365180144.png)
删除状态:处于删除状态的Java 对象被称为删除对象。比如说session delete一个对象,这个对象就不处于session缓存中了, 已经从session的缓存中移出来了,只要提交事务的话,对应的数据库记录也会被删除。
游离状态:比如说session被关闭了,这里面的对象就变为游离状态了,游离状态和删除状态中的对象,如果不用的话,会被垃圾收集器回收。
几种状态之间的转化:
![](https://images2017.cnblogs.com/blog/1050478/201707/1050478-20170728225221540-303384340.png)
例子:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class StudentTest { public static void main(String[] args) { SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); Session session = sessionFactory.openSession(); session.beginTransaction(); Class c1 = new Class(); //临时对象1 c1.setName("08计本"); Class c2 = new Class(); //临时对象2 c2.setName("09计本"); session.save(c1); //持久化对象 session.save(c2); //持久化对象 session.delete(c2); //删除对象 session.getTransaction().commit(); //提交事务 session.close(); //关闭session System.out.println(c1.getName()); //游离对象 System.out.println(c2.getName()); //删除对象 } }
解释:
c1、c2刚被new出来的时候是临时状态:
![](https://images2017.cnblogs.com/blog/1050478/201707/1050478-20170728225328586-1781399535.png)
session.save(c1) session.save(c2),c1/c2就变成了持久化对象:
![](https://images2017.cnblogs.com/blog/1050478/201707/1050478-20170728225407040-1387904045.png)
session被关闭之后,c1就是游离状态了,c1已经不在session缓存中了,当然呢,有一个对象引用依然指向着它,这个对象依然存在,只不过是变成游离对象了;
System.out.println(c1.getName())这个数据依然能取得到;
session.delete(c2)后,c2从session缓存中被移出,c2变为删除状态了,它指的删除是,session提交事务时会删除这个对象对应的数据库里面的一条记录;
System.out.println(c2.getName())还是能打印,只不过是删除状态;
![](https://images2017.cnblogs.com/blog/1050478/201707/1050478-20170728225520102-2114638200.png)
console打印:
![](https://images2017.cnblogs.com/blog/1050478/201707/1050478-20170728225628774-242408649.png)