zoukankan      html  css  js  c++  java
  • NHibernate Session Flush的作用

    session flush方法主要做了两件事:
     * 清理缓存
     * 执行sql
     
    session在什么情况下执行flush
     * 默认在事务提交时
     * 显示的调用flush
     * 在执行查询前,如:iterate
     
    hibernate按照save(insert),update、delete顺序提交相关操作

    例:当我们想以下顺序执行代码(先insert,再update,再insert),代码如下:

     1session = HibernateUtils.getSession();
     2tx = session.beginTransaction();
     3
     4User3 user = new User3();
     5user.setId("001");
     6user.setName("张三");
     7    
     8session.save(user);
     9            
    10user.setName("王五");
    11session.update(user);
    12        
    13User3 user3 = new User3();
    14user3.setId("002");
    15user3.setName("李四");
    16session.save(user3);
    17    
    18//Hibernate: insert into t_user3 (name, password, create_time, expire_time, user_id) values (?, ?, ?, ?, ?)
    19//Hibernate: insert into t_user3 (name, password, create_time, expire_time, user_id) values (?, ?, ?, ?, ?)
    20//Hibernate: update t_user3 set name=?, password=?, create_time=?, expire_time=? where user_id=?
    21//hibernate按照save(insert),update、delete顺序提交相关操作
    22tx.commit();
    执行上面的代码,通过查看日志,得到的执行顺序为insert,insert,update
    因此可以用session.flush来实现执行,代码如下:
     1session = HibernateUtils.getSession();
     2tx = session.beginTransaction();
     3
     4User3 user = new User3();
     5user.setId("003");
     6user.setName("张三");
     7            
     8session.save(user);
     9    
    10user.setName("王五");
    11session.update(user);
    12            
    13session.flush();
    14        
    15User3 user3 = new User3();
    16user3.setId("004");
    17user3.setName("李四");
    18session.save(user3);
    19        
    20//Hibernate: insert into t_user3 (name, password, create_time, expire_time, user_id) values (?, ?, ?, ?, ?)
    21//Hibernate: update t_user3 set name=?, password=?, create_time=?, expire_time=? where user_id=?
    22//Hibernate: insert into t_user3 (name, password, create_time, expire_time, user_id) values (?, ?, ?, ?, ?)
    23//因为我们在session.udpate(user)后执行了flush,所以在清理缓存时执行flush前的sql不会生成
    24//sql会按照我们的意愿执行
    25tx.commit();这样我们就实现insert,update,insert的顺序。这在一些复杂的情况下很有用
  • 相关阅读:
    MySQL数据库的优化
    PHP中获取文件扩展名
    PHP实现几种经典算法详解
    Linux服务器上crontab定时执行脚本文件
    LeetCode每日一题(五):加一
    巧妙利用枚举找出数组元素所在区间
    PHP实现几种经典算法详解
    _initialize() 区别 __construct()
    LeetCode每日一题(四):搜索插入位置
    LeetCode每日一题(三):移除元素
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/2416404.html
Copyright © 2011-2022 走看看