转:

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. OC1-XML文件解析

    <?xml version = "1.0" encoding="utf-8"?> <Users> <User id="0 ...

  2. hdu 2066 一个人的旅行 Dijkstra

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066 题意分析:以草儿家为原点,给出城市间相互抵达的时间,给出草儿想去的城市,求最短时间.典型的单源最 ...

  3. The Name/Origin of Country names

    1.Puerto Rico (Spanish for "Rich Port"/富裕的港口/富港 ) 2.HongKong(Chinese for "香港")

  4. NaN属性,isNaN函数

    NaN:Not a Number,顾名思义,表示不是一个数字. 可以把 Number 对象设置为该值,来指示其不是数字值. 使用 isNaN() 全局函数来判断一个值是否是 NaN 值 详见 Java ...

  5. 最初程序员的思维“修炼”之四——Android平台开发的“强制关闭”解决思路

    我和我的朋友参加一个比赛——物联网应用技能大赛,这个大赛所要求的技能有,硬件技术,Android平台开发技术,.NET平台开发技术,所以这是一个团队合作的比赛,基本上没有人能同时掌握这三种技术(在校生 ...

  6. svn迁移

    一.       VisualSVN服务器迁移 场景:把A服务器备份到B服务器 方法: 1.拷贝A上Repositories文件夹到B上 2.打开B上VisualSVN Server Manager ...

  7. 动态创建MySQL数据库

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...

  8. eclipse,myeclipse svn 和jadclipse 反编译插件 及安装

    插件下载链接:http://download.csdn.net/download/mmyzlinyingjie/6456785 myeclipse svn 安装: 把svn解压,然后把这个文件夹放在m ...

  9. MySQL 多实例删库脚本

    DB版本:5.5.14 OS:CentOS 6.3 在测试环境中,在一台服务器上创建多个实例,在每个实例中一个一个删库比较麻烦,因此用下面脚本,可以直接删除所有库,除了系统库以外: #!/bin/ba ...

  10. MVC学习系列——HtmlHelper扩展

    微软自带很多HtmlHelper: ActionLink - 链接到操作方法.BeginForm  - 标记窗体的开头并链接到呈现该窗体的操作方法.CheckBox  - 呈现复选框.DropDown ...