Hibernate学习之体系结构

引言

       上篇文章,我们相当于做了一个小的实验其中有两个重要的对象,一个是PO类,一个是Session.
那么什么是Hibernate Session,以及Hibernate的体系结构!以及每个对象的具体功能是什么能,我们接下来看一下。

Hibernate Session

       Hibernate Session ,只有处于Session 管理下的POJO才有持久化操作的能力。当应用程序对处于Session 管理下的POJO 实例执行操作时, Hibernate 将这种面向对象的操作转换为持久化操作!

体系结构

Hibernate学习之体系结构
                                                         简易版
       如图所示,Hibernate 是位于JDBC 之上的一层封装,也就是说,使用Hibernate 的本质依然是依赖JDBC。Hibernate 需要一个hibernate.cfg.xml 文件,该文件用于配置Hibernate 和数据库的连接信息。除此之外,还需要在POJO 类中增加持久化注解, POJO 中的持久化注解管理持久化类和数据表、数据列之间的对应关系。
       如上文所示
Hibernate学习之体系结构
Hibernate学习之体系结构
       应用程序的数据访问层既可通过JPA (Java Persistence APO )执行ORM 操作,也可使用Hibernate 原生API 来执行ORM 操作。JPA 和Hibernate 的关系就是规范和实现的关系: JPA相当于ORM 规范,而Hibernate 则是ORM 规范的实现。

全新体系结构

       为了不让编程者在关注底层JDBC的操作,Hibernate推出全面解决方案。
Hibernate学习之体系结构
                                                         全面解决方案体系结构

SessionFactory:

       这是Hibernate 的关键对象,它是单个数据库映射关系经过编译后的内存镜像,也是线程安全的。它是生成Session 的工厂,本身需要依赖于ConnectionProvider。该对象可以在进程或集群的级别上,为那些事务之间可以重用的数据提供可边的二级缓存。

Session :

       它是应用程序与持久存储层之间交互操作的一个单线程对象。它也是Hibernate 持久化操作的关键对象,所有的持久化对象必须在Session 管理下才可以进行持久化操作。此对象生存期很短。它底层封装了JDBC 连接,它也是Transaction 的工厂。Session 对象持有必边的一级缓存,在显式执行flush 之前,所有持久化操作的数据都在缓存中的Session 对象处。

持久化对象( Persistent Object )

       系统创建的POJO 实例, 一旦与特定的Sess ion 关联, 并对应数据表的指定记录, 该对象就处于持久化状态, 这一系列对象都被称为持久化对象。在程序中对持久化对象执行的修改,都将自动被转换为对持久层的修改。持久化对象完全可以是普通的JavaBeans/POJO ,唯一的区别是它们正与一个Session 关联。

瞬态对象和脱管对像

       系统通过new 关键宇创建的Java 实例,没有与Session 相关联, 此时处于瞬态。瞬态实例可能是在被应用程序实例化后,尚未进行持久化的对象。如果一个曾经持久化过的实例,如果Session 被关闭则转换为脱管状态。

事务( Transaction)

       代表一次原子操作,它具有数据库事务的概念。Hibernate 事务是对底层具体的JDBC 、JTA 以及COREA 事务的抽象。在某些情况下, 一个Session 之内可能包含多个Transaction 对象。虽然事务操作是可选的,但所有持久化操作都应该在事务管理下进行,即使是只读操作。

连接提供者( ConnectionProvider )

       它是生成JDBC 连接的工厂,它通过抽象将应用程序与底层的DataSource 或DriverManager 隔离开。这个对象无须应用程序直接访问,仅在应用程序需要扩展时使用。

事务工厂( TransactionFactory )

       它是生成Transaction 对象实例的工厂。该对象也无须应用程序直接访问。它负责对底层具体的事务实现进行封装,将底层具体的事务抽象成Hibernate 事务。