Hibernate-----3、Hibernate的体系结构

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

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

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

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

瞬态对象:new创建的Java实例,没有与Session相关联(瞬态);瞬态实例可能是被应用程序实例化后,尚未进行持久化的对象;

脱管对象:曾经持久化过的实例,但因为Session的关闭则转化为托管状态

连接提供者(ConnectionProvider):生成JDBC连接的工厂,通过抽象将应用程序与地层的DataSource或DriverManager隔离开。该对象仅在应用程序需扩展时使用

事务工厂(TransactionFactory):生成Transaction对象实例的工厂。该对象无须应用程序直接访问。它负责对地层具体的事务实现进行封装、将地层具体的事务抽象成Hibernate事务

实际应用中很少直接使用DriverManager来获取数据库连接,通常用DataSource来获取数据库连接,因此实际应用中ConnectionProvicer通常由DataSource充当。由于SessionFactory底层封装了ConnectionProvider,因此实际应用中,SessionFactory底层封装了DataSource

时间: 2024-10-07 21:46:11

Hibernate-----3、Hibernate的体系结构的相关文章

Hibernate配置文件——hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <

Rhythmk 学习 Hibernate 03 - Hibernate 之 延时加载 以及 ID 生成策略

Hibernate 加载数据 有get,跟Load 1.懒加载: 使用session.load(type,id)获取对象,并不读取数据库,只有在使用返回对象值才正真去查询数据库. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @Test    public void  test1()    {        Session session = null;         try {             session = Hiber

Rhythmk 学习 Hibernate 02 - Hibernate 之 瞬时状态 离线状态 持久化状态 三状态

by:rhythmk.cnblogs.com 1.Hibernate 三种状态: 1.1.三种定义(个人理解,不一定准确):  瞬时状态(transient):    不被session接管,且不存在数据库中的对象的状态,类似于新New一个对象  离线状态 (detached):    数据库中存在而不被session接管  持久化状态(persistent): 对象被session管理且数据库中存在此对象 1.2. 状态之间转换关系图 2 .状态转换以及Hibernate数据库执行过程详解:

异常:org.hibernate.HibernateException: &#39;hibernate.dialect&#39; must be set when no Connection available

spring整合hibernate报了这样一个异常,一直以为是dialect参数的问题,最后发现原来是配数据源时,数据库的名字写错了....... 找了半天,重新写了配置文件没出问题,但就不知道这个文件哪里出问题了.配置文件里面这种细节一定要注意. 版权声明:本文为博主原创文章,未经博主允许不得转载. 异常:org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available

Rhythmk 学习 Hibernate 04 - Hibernate 辅助工具 之 JBoos Tool

1.安装JBoos Tool Help -> Install new Software 然后添加: http://download.jboss.org/jbosstools/updates/development http://download.jboss.org/jbosstools/updates/stable/ 稍等一刻,选择 Hibernate tool 下一步 ,完成后重启Eclipse即可. 2.项目配置文件生成: 2.1 新建一项目,项目右键生成相关配置 然后如图: 2.2 此处需

Rhythmk 学习 Hibernate 05 - Hibernate 表间关系 [ManyToOne,OneToMany]

1.项目结构: 1.1.场景说明: 一个订单,包含多个产品 1.2.类文件: Order.java ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 package com.rhythmk.model; import java.util.Date; public

Rhythmk 学习 Hibernate 05 - Hibernate 表间关系 [One To One]

1.One To One 单相 背景: 古代一个老婆  只能关联一个老公 husband.java ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package com.rhythmk.model; public class husband {          public Integer getHusbandId() {         return husbandId;     }     public void setHusba

Hibernate之Hibernate环境配置

Hibernate之Hibernate环境配置 一.Hibernate环境搭建的步骤 1.添加Hibernate && SQLServer 的Jar antlr-2.7.7.jar dom4j-1.6.1.jar hibernate-commons-annotations-4.0.5.Final.jar hibernate-core-4.3.11.Final.jar hibernate-jpa-2.1-api-1.0.0.Final.jar jandex-1.1.0.Final.jar j

Rhythmk 学习 Hibernate 09 - Hibernate HQL

1.初始数据 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 @Test     public void test01() {         Session session = null;         try {             session = HibernateUtil.getSessionFactory().openSession();             session.begin

Rhythmk 学习 Hibernate 08 - Hibernate annotation 关联关系注解

1.一对一 (One to One)    共三种情况:     1.1 主键共享    1.2 外键共享 1.3 中间表关联 1.1  code: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @Entity public class article {     @Id     @GeneratedValue    public Integer getArticleId() {         return articleId;     }     .....