一、阅读Session接口的注释的理解。(看着注释翻译的,有些地方可能翻译的不太对,有疑问再看源文档)

①、Session的生命周期随着事务开始而开始,事务的结束而结束。

附原文:The lifecycle of a <tt>Session</tt> is bounded by the beginning and end of a logical transaction. (Long transactions might span several database transactions.)

②、Session的主要方法提供了对对象的增删改查操作,对象可能存在三种状态:临时状态(transient)、持久化状态(persistent)、游离状态(detached)

  临时状态:没有持久化、没有和任何Session关联(附原文:never persistent, not associated with any <tt>Session</tt><br>)

  持久化状态:与一个唯一的Session关联(associated with a unique <tt>Session</tt><br>)

  游离状态:之前是与Session关联的,但是现在已经脱离Session的管理,没有与任何Session关联(previously persistent, not associated with any <tt>Session</tt><br>)

③、1.临时状态的对象可能会在调用save()、persist()、saveOrUpdate()这几个方法后被持久化。

2.持久化状态的对象可能在调用delete()方法后变成临时状态。

  3.get()、load()方法返回的对象都是持久化状态。

4.游离状态的对象可能会在调用update()、saveOrUpdate()、lock()、replicate()这几个方法后被持久化

④、临时状态或游离状态的对象在调用merge()方法后可能会被固化为一个新的持久化对象。

⑤、save()、persist()方法会导致发送一个INSERT语句;delete()方法会导致发送一个DELETE语句;update()、merge()方法会导致发送一个UPDATE语句;

  在清除缓存的时候发现一个持久化对象发生改变会发送一条UPDATE语句。调用saveOrUpdate()或replicate()将会导致发送一条INSERT语句或者UPDATE语句。

⑥、每个线程/事务都应该从SessionFactory中获得它自己的实例。

⑦、如果一个Session的持久化类是可序列化的那么这个Session也是可序列化的。

⑧、如果Session抛出异常,那么事务必须回滚,并且抛弃Session。当异常发生后,Session的内部状态可能与数据不一样。

------------------------------------------------分割线------------------------------------------------------

二、阅读一些方法

public void flush() throws HibernateException;

一)、

  清除session缓存。

  ①、在完成一些工作后,在提交事务和关闭session之前,必须要调用flush()方法。

  ②、<i>Flushing</i> is the process of synchronizing the underlying persistent store with persistable state held in memory.(暂时不能将其翻译通顺)

二)、public SessionFactory getSessionFactory();

  获取创建这个session的SessionFactory。

三)、public Connection close() throws HibernateException;

  通过释放JDBC连接和清理来结束这个session

四)、public Serializable getIdentifier(Object object);

  返回给定对象的ID(identifier),如果这个对象处于临时状态或者游离状态那么就会抛出异常。

五)、public boolean contains(Object object);

  检查给定的对象是否与session关联。

六)、public void evict(Object object);

  将对象从session缓存中移除。这个时候对象将不与数据库中的同步了。(后面的不懂翻译)This operation cascades to associated instances if the association is mapped with <tt>cascade="evict"</tt>.

七)、public Object load(Class theClass, Serializable id);

  load()方法有好多个重载的方法。这里只列举一个

  ①、用给定的id和对象的类型加载一个类持久化对象。

  ②、不能使用这个方法来判断一个对象是否存在,可以使用get()方法代替

八)、public void replicate(Object object, ReplicationMode replicationMode);

  重新使用当前id将游离状态下的对象持久化。

九)、public Serializable save(Object object);

  将一个临时状态的对象持久化,设定id。如果在映射文件中将<id>标签中的<generator>标签的 class属性设为"assigned" 。那么id就使用当前临时状态对象的id值。

十)、public void saveOrUpdate(Object object);

  不懂翻译通顺

  Either {@link #save(Object)} or {@link #update(Object)} the given instance, depending upon resolution of the unsaved-value checks (see the manual for discussion of unsaved-value checking).<p/> This operation cascades to associated instances if the association is mapped with {@code cascade="save-update"}

十一)、public void update(Object object);

  将一个游离状态的对象持久化,id设为游离状态对象的ID,但是如果有一个持久化对象的id和这个游离状态的id相同,那么就会抛出异常

十二)、public Object merge(Object object);

之后继续更新

阅读Hibernate框架Session接口的源码的笔记的更多相关文章

  1. Java集合框架之接口Collection源码分析

    本文我们主要学习Java集合框架的根接口Collection,通过本文我们可以进一步了解Collection的属性及提供的方法.在介绍Collection接口之前我们不得不先学习一下Iterable, ...

  2. 如何优雅的阅读 GitHub 上开源 js 框架和库的源码

    如何优雅的阅读 GitHub 上开源 js 框架和库的源码 step 先总后分,即先了解一下啊框架的大体架构,又一个全局的认识,在选择某些和感兴趣的部分,仔细阅读,各个击破: 带着问题阅读,用到了什么 ...

  3. Spring框架之spring-web web源码完全解析

    Spring框架之spring-web web源码完全解析 spring-web是Spring webMVC的基础,由http.remoting.web三部分组成,核心为web模块.http模块封装了 ...

  4. MyBatis框架的使用及源码分析(十一) StatementHandler

    我们回忆一下<MyBatis框架的使用及源码分析(十) CacheExecutor,SimpleExecutor,BatchExecutor ,ReuseExecutor> , 这4个Ex ...

  5. MyBatis框架的使用及源码分析(九) Executor

    从<MyBatis框架的使用及源码分析(八) MapperMethod>文中我们知道执行Mapper的每一个接口方法,最后调用的是MapperMethod.execute方法.而当执行Ma ...

  6. Spring框架之spring-web http源码完全解析

    Spring框架之spring-web http源码完全解析 Spring-web是Spring webMVC的基础,由http.remoting.web三部分组成. http:封装了http协议中的 ...

  7. 【集合框架】JDK1.8源码分析之HashMap(一) 转载

    [集合框架]JDK1.8源码分析之HashMap(一)   一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的HashMap对之前做了较大的优化 ...

  8. 【集合框架】JDK1.8源码分析之ArrayList详解(一)

    [集合框架]JDK1.8源码分析之ArrayList详解(一) 一. 从ArrayList字表面推测 ArrayList类的命名是由Array和List单词组合而成,Array的中文意思是数组,Lis ...

  9. 基于Docker的TensorFlow机器学习框架搭建和实例源码解读

    概述:基于Docker的TensorFlow机器学习框架搭建和实例源码解读,TensorFlow作为最火热的机器学习框架之一,Docker是的容器,可以很好的结合起来,为机器学习或者科研人员提供便捷的 ...

随机推荐

  1. [转]Supporting OData Query Options in ASP.NET Web API 2

    本文转自:https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/suppor ...

  2. Linux常用命令语法+示例

    原文出自:https://blog.csdn.net/seesun2012 Linux常用命令:Linux查看日志命令总结:Tomcat相关:Linux配置网卡,连接外网:Linux下安装JDK:Li ...

  3. vscode设置中文,设置中文不成功问题

    刚安装好的vscode界面显示英文,如何设置中文呢? 在locale.json界面设置”locale":"zh-cn"也未能实现界面为中文,在网上找了参考了,以下教程真实 ...

  4. mysql5.7忘记密码修改方法

    mysql5.7忘记密码修改方法 mysql是开发中最常用的关系数据库之一.一般在安装数据库到时候会自定义root密码,有时候会忘记该密码,这时候需要对数据库进行密码修改. 一.windows下更改m ...

  5. 来看看javaweb的自定义标签

    1.为什么需要自定义标签? jsp的简单标签其实就是jsp的自定义标签,主要作用就是移除jsp页面中的java代码,使得jsp页面只有标签和EL表达式,而没有java代码.利用自定义标签,可以使软件开 ...

  6. Android源码下编译APK步骤

    1.进入android源码目录下的build下执行:source envsetup.sh 后继续在该路径下执行lunch. 2.编写完成工程 3.编写Android.mk文件,放入工程目录下     ...

  7. maven filter不起作用

    遇到的一个坑, spring boot + maven maven fileter没有起作用.spring boot把默认占位符改了 参考:https://blog.csdn.net/mn960mn/ ...

  8. Cocos2d-js 开发记录:基本图形绘制

    做着做着想要用基本绘图函数画个矩形,在cocos2d-js 3.0里可以使用DrawNode var dn = new cc.DrawNode(); var ltp = cc.p(0, 32); va ...

  9. LinqToSql EntityFramework(ef)查看生成的sql语句

    var dc=new DBDataContext(); TextWriter tw = new StringWriter(); dc.Log = tw; var list = dc.News.Skip ...

  10. CentOS 7运维管理笔记(7)----Apache 基于端口的虚拟主机配置

    如果一台服务器只有一个IP或需要通过不同的端口访问不同的虚拟主机,可以使用基于端口的虚拟主机配置. (1) 在虚拟机的CentOS7服务器上配置 eth0:4 为192.168.1.214: (2) ...