转:

http://kayo.iteye.com/blog/204143

Session 接口 
Session 接口对于Hibernate 开发人员来说是一个最重要的接口。然而在Hibernate 中,实例 
化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中确实很重要, 
因为在客户程序中,可能会不断地创建以及销毁Session 对象,如果Session 的开销太大,会给系 
统带来不良影响。但值得注意的是Session 对象是非线程安全的,因此在你的设计中,最好是一个 
线程只创建一个Session对象。 
在Hibernate 的设计者的头脑中,他们将session看作介于数据连接与事务管理一种中间接口。 
我们可以将session想象成一个持久对象的缓冲区,Hibernate能检测到这些持久对象的改变,并及 
时刷新数据库。我们有时也称Session是一个持久层管理器,因为它包含这一些持久层相关的操作, 
诸如存储持久对象至数据库,以及从数据库从获得它们。请注意,Hibernate 的session不同于JSP 
应用中的HttpSession。当我们使用session这个术语时,我们指的是Hibernate 中的session,而 
我们以后会将HttpSesion 对象称为用户session。 
 SessionFactory 接口 
这里用到了一个设计模式――工厂模式,用户程序从工厂类SessionFactory中取得Session 的 
实例。 
令你感到奇怪的是SessionFactory并不是轻量级的!实际上它的设计者的意图是让它能在整个 
应用中共享。典型地来说,一个项目通常只需要一个SessionFactory就够了,但是当你的项目要操 
作多个数据库时,那你必须为每个数据库指定一个SessionFactory。 
SessionFactory在Hibernate中实际起到了一个缓冲区的作用,它缓冲了Hibernate自动生成的SQL 
语句和一些其它的映射数据,还缓冲了一些将来有可能重复利用的数据。 
Configuration 接口 
Configuration 接口的作用是对Hibernate 进行配置,以及对它进行启动。在Hibernate 的启动 
过程中,Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个 
SessionFactory对象。 
虽然Configuration 接口在整个Hibernate 项目中只扮演着一个很小的角色,但它是启动 
hibernate 时你所遇到的每一个对象。 
 Transaction 接口 
Transaction 接口是一个可选的API,你可以选择不使用这个接口,取而代之的是Hibernate 的 
设计者自己写的底层事务处理代码。 Transaction 接口是对实际事务实现的一个抽象,这些实现包 
括JDBC的事务、JTA 中的UserTransaction、甚至可以是CORBA 事务。之所以这样设计是能让开 
发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移值。 
 Query 和Criteria接口 
Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本 
地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。 
Criteria接口与Query接口非常类似,它允许你创建并执行面向对象的标准化查询。 
值得注意的是Query接口也是轻量级的,它不能在Session之外使用。 
 Callback 接口 
当一些有用的事件发生时――例如持久对象的载入、存储、删除时,Callback 接口会通知 
Hibernate去接收一个通知消息。一般而言,Callback接口在用户程序中并不是必须的,但你要在你 
的项目中创建审计日志时,你可能会用到它。 
策略接口 
Hibernate与某些其它开源软件不同的还有一点――高度的可扩展性,这通过它的内置策略机制 
来实现。当你感觉到Hibernate 的某些功能不足,或者有某些缺陷时,你可以开发一个自己的策略来替换它,而你所要做的仅仅只是继承它的某个策略接口,然后实现你的新策略就可以了,以下是 
它的策略接口: 
·  主键的生成 (IdentifierGenerator 接口) 
·  本地SQL语言支持 (Dialect 抽象类) 
·  缓冲机制 (Cache 和CacheProvider 接口) 
·  JDBC 连接管理 (ConnectionProvider接口) 
·  事务管理 (TransactionFactory, Transaction, 和 TransactionManagerLookup 接口) 
·  ORM 策略 (ClassPersister 接口) 
·  属性访问策略 (PropertyAccessor 接口) 
·  代理对象的创建 (ProxyFactory接口) 
Hibernate为以上所列的机制分别创建了一个缺省的实现,因此如果你只是要增强它的某个策略 
的功能的话,只需简单地继承这个类就可以了,没有必要从头开始写代码。

hibernate Session的更多相关文章

  1. org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here

    org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not a ...

  2. Use Spring transaction to simplify Hibernate session management

    Spring对Hibernate有很好的支持    DataSource ->SessionFactory-> HibernateTranscationManagerHibernate中通 ...

  3. Could not open Hibernate Session for transaction;

    javax.servlet.ServletException: org.springframework.transaction.CannotCreateTransactionException: Co ...

  4. Hibernate3回顾-5-简单介绍Hibernate session对数据的增删改查

    5. Hibernate对数据的增删改查 5.1Hibernate加载数据 两种:get().load() 一. Session.get(Class arg0, Serializable arg1)方 ...

  5. [转]Hibernate Session各种状态转换方法分析

    摘自http://spiritfrog.iteye.com/blog/221177 我的印象里, Hibernate session中常用的保存操作只有:save, update, saveOrUpd ...

  6. spring事务管理出错。No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy ...

  7. [原理][源代码解析]spring中@Transactional,Propagation.SUPPORTS,以及 Hibernate Session,以及jdbc Connection关系---转载

    问题: 一. 1. Spring 如何处理propagation=Propagation.SUPPORTS? 2. Spring 何时生成HibernateSession ? 3. propagati ...

  8. No Hibernate Session bound to thread, and configuration does not allow creat

    No Hibernate Session bound to thread, and configuration does not allow creat 今天遇到这么一个错误,在网上差了很多都没有能解 ...

  9. Hibernate Session 获取connection

    Hibernate Session 获取connection 由于最近一个项目要用到一条辅助的SQL ,hibernate里面的SQLQuery API 总的SQL语句不能包含 : 冒号, 固放弃Hi ...

  10. hibernate.Session简介

    ★→→SessionFactory (org.hibernate.SessionFactory) 包含已经编译的映射(mappings),是制造session的工厂,可能含有一些可以在各个事务(tra ...

随机推荐

  1. GForms展现服务云开发平台

    GForms完全基于开放标准,使用XForms作为面向服务的架构简单易用的前端,帮助用户跨多个行业加速数据整合.GForms提供可视化设计器,实现展现服务开发中数据与模型完全分离,加快开发速度快速投入 ...

  2. JAVA:变量,数据类型,运算符,流程控制(简介)<1>

    一.安装和配置jdk 1.jdk是什么? (1).jdk全称是Java Development Kit, Java开发工具包; (2).jdk是sun公司开发的; (3).jdk主要包括:jre(Ja ...

  3. 关于css的一些小细节---link

    <link rel="stylesheet" href=“a.css” type="text/css"> rel:当前文档与被链接文档间的关系,必须 ...

  4. JS学习第二课

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. CP30 ---DataSource连接池的创建过程

    1.参看CP30文档quickStart 如下具体创建步骤 public DataSource getDs() throws Exception { //创建连接池对象 ComboPooledData ...

  6. C# 操作.ini文件

    1.声明变量 #region "声明变量" /// <summary> /// 写入INI文件 /// </summary> /// <param n ...

  7. winform 批量导入本地sql文件,批量导入mdb(access)文件到sqlserver

    0.数据库连接 private void button1_Click(object sender, EventArgs e) { this.btnUpdate.Enabled = false; #re ...

  8. js实现雪花飘落效果的代码

    使用js实现雪花飘落的效果,用html5绘布加js写的雪花飘效果 . 代码: <html> <head> <script> /** * js与html5实现的雪花飘 ...

  9. html设置360兼容/极速模式

    由于众所周知的情况,国内的主流浏览器都是双核浏览器:基于Webkit内核用于常用网站的高速浏览.基于IE的内核用于兼容网银.旧版网站.以360的几款浏览器为例,我们优先通过Webkit内核渲染主流的网 ...

  10. MemProof教程

    简介 MemProof(内存清道夫)是AutomatedQA出品的一款非常不错的检测内存泄漏和资源泄漏的免费调试工具,适合于WIN32平台下使用DELPHI/C++ BUILDER开发的应用程序. 利 ...