一、
package com.ru.service; import static org.junit.Assert.*; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test; import com.ru.domain.Classes; public class SessionTest { @Test public void test() { //研究session的生命周期 Configuration cf=new Configuration().configure(); SessionFactory sf=cf.buildSessionFactory(); Session session=sf.openSession(); try { Transaction tx=session.beginTransaction(); Classes clazz=new Classes(); clazz.setName("云1"); //clazz对象被放到session缓存中,session缓存中的clazz变量指向classes对象内存。在提交事务之前数据不会被存放到数据库 session.save(clazz); //获取id值 int id=clazz.getId(); System.out.println("##########################"+id); //clazz变量不再引用classes对象 clazz=null; //查询一条数据,这个数据为classes对象 Classes clazz2=(Classes)session.get(Classes.class, id); System.out.println("姓名:"+clazz2.getName()+"id:"+clazz2.getId()); //数据被放入数据库中 tx.commit(); //关闭session清空缓存,session中没有变量指向classes对象的内存。 session.close(); System.out.println("###############关闭session#########################"); //这时仍然可以访问到classes对象的属性。classes对象的地址没有被回收 System.out.println("姓名:"+clazz2.getName()+"id:"+clazz2.getId()); //clazz2变量不再引用classes对象,这是没有任何变量指向classes对象,内存地址被回收。 clazz2=null; //会报错 System.out.println("姓名:"+clazz2.getName()+"id:"+clazz2.getId()); } catch (Exception e) { e.printStackTrace(); }finally{ sf.close(); } } }
二、