转:

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. MVC项目页面获取控制器的信息

    页面获取控制器的名字: @{ if (ViewContext.RouteData.Values["controller"].ToString()=="Home" ...

  2. 20141211—C#面向对象,封装

    封装 一个private 的变量.在变量名上右键-重构-封装字段 小建议:在创建封装字段的时候,在名字前加 “_”用以区分. 封装时,下划线会自动去除 点击确定后: 应用: 赋值的时候走 set 取值 ...

  3. CentOS 7.2 无法生成 coredump文件

    CentOS版本 cat /etc/centos-release  CentOS Linux release 7.2.1511 (Core) 设置ulimit -c ulimited 依旧无法生成co ...

  4. 批处理测试局域网网络连通性ping1-255

    for /l %%1 in (1 1 255)do ping /n 1 192.168.1.%%1       ##bat下 运行 for /l %i in (1,1,254) do ping -n ...

  5. 【Qt】Qt Linguist介绍【转】

    简介 Qt提供了一款优秀的支持Qt C++和Qt Quick应用程序的翻译工具.发布者.翻译者和开发者可以使用这款工具来完成他们的任务. 发布者:承担了全面发布应用程序的责任.通常,他们协调开发者和翻 ...

  6. mongodb 3.x WiredTiger存储优化测试

    http://pan.baidu.com/s/1sk8zekX 总结:1.使用WiredTiger引擎压缩比例约是MMAP引擎的12倍,2.从时间上看,此次测试100个线程并发,mongodb 3.2 ...

  7. PHP实现链式操作的原理

    在一个类中有多个方法,当你实例化这个类,并调用方法时只能一个一个调用,类似: db.php <?php class db{ public function where() { //code he ...

  8. Delphi XE5教程8:使用Delphi命名空间

    // Project file declarations... //项目文件声明… program MyCompany.ProjectX.ProgramY; // Unit source file d ...

  9. KMP算法的理解

    ---恢复内容开始--- 在看数据结构的串的讲解的时候,讲到了KMP算法——一个经典的字符串匹配的算法,具体背景自行百度之,是一个很牛的图灵奖得主和他的学生提出的. 一开始看算法的时候很困惑,但是算法 ...

  10. hexo-github 博客搭建

    安装nodejs 从官网下载系统对应的源码 wget -qO- https://raw.githubusercontent.com/creationix/nvm/master/install.sh | ...