📄 architecture.html
字号:
<html><head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>第 3 章 体系结构(Architecture)</title><link rel="stylesheet" href="../shared/css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.65.1"><link rel="home" href="index.html" title="HIBERNATE - 符合Java习惯的关系数据库持久化"><link rel="up" href="index.html" title="HIBERNATE - 符合Java习惯的关系数据库持久化"><link rel="previous" href="tutorial.html" title="第 2 章 
 Hibernate入门
 "><link rel="next" href="session-configuration.html" title="第 4 章 
 配置
 "></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">第 3 章 体系结构(Architecture)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tutorial.html">上一页</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="session-configuration.html">下一页</a></td></tr></table><hr></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title"><a name="architecture"></a>第 3 章 体系结构(Architecture)</h2></div></div><div></div></div><div class="sect1" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="architecture-overview"></a>3.1. 概况(Overview)</h2></div></div><div></div></div><p> 一个非常简要的Hibernate体系结构的概要图: </p><div class="mediaobject" align="center"><img src="../shared/images/overview.gif" align="middle"></div><p> 从这个图可以看出,Hibernater使用数据库和配置信息来为应用程序提供持久化服务(以及持久的对象)。 </p><p> 我们来更详细地看一下Hibernate运行时体系结构。由于Hibernate非常灵活,且支持数种应用方案, 所以我们这只描述一下两种极端的情况。“轻型”的体系结构方案,要求应用程序提供自己的JDBC 连接并管理自己的事务。这种方案使用了Hibernate API的最小子集: </p><div class="mediaobject" align="center"><img src="../shared/images/lite.gif" align="middle"></div><p> “全面解决”的体系结构方案,将应用层从底层的JDBC/JTA API中抽象出来,而让Hibernate来处理这些细节。 </p><div class="mediaobject" align="center"><img src="../shared/images/full_cream.gif" align="middle"></div><p> 图中各个对象的定义如下: </p><div class="variablelist"><dl><dt><span class="term">SessionFactory (<tt class="literal">org.hibernate.SessionFactory</tt>)</span></dt><dd><p> 针对单个数据库映射关系经过编译后的内存镜像,它也是线程安全的(不可变)。 它是生成<tt class="literal">Session</tt>的工厂,本身要用到<tt class="literal">ConnectionProvider</tt>。 该对象可以在进程或集群的级别上,为那些事务之间可以重用的数据提供可选的二级缓存。 </p></dd><dt><span class="term">Session (<tt class="literal">org.hibernate.Session</tt>)</span></dt><dd><p> 表示应用程序与持久储存层之间交互操作的一个单线程对象,此对象生存期很短。 其隐藏了JDBC连接,也是<tt class="literal">Transaction</tt>的工厂。 其会持有一个针对持久化对象的必选(第一级)缓存,在遍历对象图或者根据持久化标识查找对象时会用到。 </p></dd><dt><span class="term">持久的对象及其集合</span></dt><dd><p> 带有持久化状态的、具有业务功能的单线程对象,此对象生存期很短。 这些对象可以是普通的JavaBeans/POJO,唯一特殊的是他们正与(仅仅一个)<tt class="literal">Session</tt>相关联。 这个<tt class="literal">Session</tt>被关闭的同时,这些对象也会脱离持久化状态,可以被应用程序的任何层自由使用。 (例如,用作跟表示层打交道的数据传输对象data transfer object。) </p></dd><dt><span class="term">瞬态(transient)以及脱管(detached)的对象及其集合</span></dt><dd><p> 持久类的没有与<tt class="literal">Session</tt>相关联的实例。 他们可能是在被应用程序实例化后,尚未进行持久化的对象。 也可能是因为实例化他们的<tt class="literal">Session</tt>已经被关闭而脱离持久化的对象。 </p></dd><dt><span class="term">事务Transaction (<tt class="literal">org.hibernate.Transaction</tt>)</span></dt><dd><p> (可选的)应用程序用来指定原子操作单元范围的对象,它是单线程的,生存期很短。 它通过抽象将应用从底层具体的JDBC、JTA以及CORBA事务隔离开。 某些情况下,一个<tt class="literal">Session</tt>之内可能包含多个<tt class="literal">Transaction</tt>对象。 尽管是否使用该对象是可选的,但是事务边界的开启与关闭(无论是使用底层的API还是使用<tt class="literal">Transaction</tt>对象)是必不可少的。 </p></dd><dt><span class="term">ConnectionProvider (<tt class="literal">org.hibernate.connection.ConnectionProvider</tt>)</span></dt><dd><p> (可选的)生成JDBC连接的工厂(同时也起到连接池的作用)。 它通过抽象将应用从底层的<tt class="literal">Datasource</tt>或<tt class="literal">DriverManager</tt>隔离开。 仅供开发者扩展/实现用,并不暴露给应用程序使用。 </p></dd><dt><span class="term">TransactionFactory (<tt class="literal">org.hibernate.TransactionFactory</tt>)</span></dt><dd><p> (可选的)生成<tt class="literal">Transaction</tt>对象实例的工厂。 仅供开发者扩展/实现用,并不暴露给应用程序使用。 </p></dd><dt><span class="term"><span class="emphasis"><em>扩展接口</em></span></span></dt><dd><p> Hibernate提供了很多可选的扩展接口,你可以通过实现它们来定制你的持久层的行为。 具体请参考API文档。 </p></dd></dl></div><p> </p><p> 在一个“轻型”的体系结构中,应用程序可能绕过
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -