Student s = new Student("stu1");
        SessionFactory sf = HibernateUtils.getSessionFactory();
        Session session = sf.openSession();
        session.beginTransaction();
        session.save(s);
        session.evict(s);
        session.getTransaction().commit();
        session.close();
        sf.close();evict看文档的意思是在session缓存里把persistent状态对象移除,之后事务commit()中flush()会同步session缓存中所有对象,但为什么以上代码还会产生insert语句,并持久化到数据库中?

解决方案 »

  1.   

    Session中有好几种临时存储区,其中有一个叫Insertion存储区,调用flush()方法清空Insertion临时存储区的引用,而调用evict()方法将清空缓存的Session中数据引用,但是不清空Insertion临时存储区的数据引用;你那个 session.save(s);方法中的s引用就是存储在Insertion临时存储区,所以出现了你所说的数据不同步现象。