HIbernate中的Session以及Hibernate 实现过程

HIbernate中的Session
  Session是JAVA应用程序和Hibernate进行交互时使用的主要接口,它也是持久化操作核心API,
  注意这里的Session的含义,它与传统意思上web层的HttpSession并没有关系,Hibernate Session之与Hibernate,
相当于JDBC Connection相对与JDBC。
SessionFactory负责创建Session,SessionFactory是线程安全的,多个并发线程可以同时访问一个SessionFactory 并从中获取Session实例。
而Session并非线程安全,也就是说,如果多个线程同时使用一个Session实例进行数据存取,
则将会导致Session 数据存取逻辑混乱.因此创建的Session实例必须在本地存取空上运行,使之总与当前的线程相关。
Session 什么时候清理缓存?
1,commit() 方法被调用时
2,查询时会清理缓存,保证查询结果能反映对象的最新状态。
3,显示的调用session 的 flush方法。

 

Connection conn = ...; ---------------------------------------- session = sf.openSession();;
conn.setAutoCommit(false); ----------------------------------------  tx = session.beginTransactioin();;
conn.commit(); ---------------------------------------- tx.commit();; (对应左边的两句);
conn.setAutoCommit(true);
conn.close(); ---------------------------------------- session.close();;
Hibernate的JDBCTransaction根本就是conn.commit而已,根本毫无神秘可言,只不过在Hibernate中,
Session打开的时候,就会自动conn.setAutoCommit(false),不像一般的JDBC,默认都是true,
所以你最后不写commit也没有关系,由于Hibernate已经把AutoCommit给关掉了,
所以用Hibernate的时候,你在程序中不写Transaction的话,数据库根本就没有反应。

posted @ 2018-08-20 21:17  id_于洋  阅读(421)  评论(0编辑  收藏  举报