• flush(), clear(), save()的简单解释


    hibernate最新发布包的javadoc里对这三个方法的解释是:
      clear() :Completely clear the session.清空session,该清空操作只对于要保存的、删除的和修改的数据起作用,不涉及查询的结果。
      close() :End the session by releasing the JDBC connection and cleaning up.释放并清空JDBC连接。但是不一定非得关闭session。
      flush(): Force this session to flush.强制刷新流的缓冲。flush必须在一个操作单元结束之后且在提交事务和关闭连接之前被调用。例如插入一条数据。
    sess.save(user);的意思是将user持久化,也就是说把数据插入到数据库中。清空缓存是在持久化之后进行的。至于要不要清空缓存,是要看你的FlushMode是怎么设置的。

     session.clear()方法负责清空session缓存中的实体对象,不管缓存中数据是否与数据库记录一致;

     session.flush()方法负责同步session缓存中的实体对象与数据库记录,保持数据的一致性。

     1 @Test
     2 public void testSessionClear() {
     3   Session session = sessionFactory.openSession();
     4   session.beginTransaction();
     5   Teacher t = (Teacher) session.get(Teacher.class, 3);
     6   System.out.println(t.getName());
     7   session.clear();         //这里不clear只会执行一次sql语句,有clear会执行2次
     8   Teacher t2 = (Teacher) session.get(Teacher.class, 3);
     9   System.out.println(t2.getName());
    10   session.getTransaction().commit();
    11 }
    如果不是clear(),由于一级缓存的存在,查询同样的记录,只会发出一条sql语句;如果清空了session缓存,那么这里会发出2条sql语句。 
    @Test
    public void testFlush()
    {
      Session session =  sessionFactory.openSession();
      session.beginTransaction();
      Teacher t = (Teacher) session.get(Teacher.class, 3);
      t.setName("xiu");
      session.flush();           //有flush会执行2次UPDAE,没有会只执行一次
      t.setName("aty");
      session.getTransaction().commit();
    }
    
    
    如果不执行flush,只会发出一条update语句;执行了flush,会发出2条update语句,也就是说flush会强制缓存与数据库数据同步
  • 相关阅读:
    ComboBox中Tag的使用,转换为Enum类型
    datagridview定时分页(翻页)
    DataGridView导出excel/xml
    Log4net学习笔记及部分使用方法
    C#中Abstract 与 Virtual
    The project type is not supported by this installation?
    全国哀悼日 网站变灰装(附代码)
    设计出好的对象模式
    不仅拥有XmlDocument一样简单的XML操作方法,并且实现数据文件安全存储功能——XmlEDocument
    Remoting模仿QQ实现客户端,服务器端聊天功能
  • 原文地址:https://www.cnblogs.com/wgbs25673578/p/5134726.html
Copyright © 2020-2023  润新知