public void test() { //瞬时状态 Teacher teacher=new Teacher(); teacher.setName("teacher"); teacher.setPwd("123456"); Session session=sessionFactory.getCurrentSession(); session.beginTransaction(); //持久状态 session.save(teacher); System.out.println("teacher name:"+teacher.getName()); session.getTransaction().commit(); //脱管状态 teacher.setName("test"); System.out.println("teacher name:"+teacher.getName()); }
总结:
1 瞬时状态
对象在new出来的时候处于该状态下,状态的特点是:内存有,session缓存没有,数据库没有(没有相关的数据)
session瞬时化对象的方法如下:
1) delete 删除session中的持久化对象
2 持久化状态
当瞬时对象被save()后并且session还没关闭时,状态就是持久化状态,状态特点是:内存有,session缓存有,数据库有(有相关的数据)
session持久化对象的方法如下:
1) get 获取一个持久化对象 如果数据库没有该对象则返回null
2) load 获取一个持久化对象 如果数据库没有该对象则产生ObjectNotFoundException异常
3) save 保存一个对象到持久化,当无事务时,执行sql语句,对象插入数据库,然后又回滚出来
4) saveOrUpdate 保存或者更新一个对象到持久化状态
5) update 更新一个脱管状态对象到持久化状态
6) lock 获取一个带乐观锁的持久化对象
7) persist 保存一个对象到持久化,当无事务时,不执行sql语句,不提交对象到数据库中,有事务时与save方法相同
3 脱管状态
当session关闭后,持久化状态变胶管状态,状态特点是:内存有,session缓存没有,数据库有(有相关的数据)
session脱管对象的方法如下:
1) clear 清除Session缓存中的内容
2) close 关闭Session对象
3) evict 清除session缓存当中的一个持久化对象
最后三种状态只要记住:
瞬时:只有内存有,
脱管:只有缓存没有
持久:哪里都有