转:

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. 点击文字label同时选中checkbox radio

    在做网页的时候一般会有一个需求:点击一段文字信息的同时选中某个checkbox 旧处理方式是在这段文字上加上点击事件触发checkbox的选中事件 //jq中://选中 $("#ID&quo ...

  2. 20150410---GridView分页(备忘)

    GridView自带分页功能,但是模板单一,试用较少数据. AllowPaging="true" PageSize="10" 启用分页设置.默认每页数量为10 ...

  3. hdu 2689 Sort it

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2689 题目分析:求至少交换多少次可排好序,可转换为逆序对问题. 用冒泡排序较为简单,复杂度较大~~ 也 ...

  4. Window Phone 8开发问题反思

    项目开发有段时间了,进入了阶段测试.然而在测试过程中bug连连不断,在抱怨产品需求的坑爹.不合理之外,我也一直在反思为什么会出现这么多Bug. 首先,由于项目开发的两个人都是新手,在刚刚认识MVVM架 ...

  5. FPGA/CPLD设计思想与技巧

    本文讨论的四种常用FPGA/CPLD设计思想与技巧:乒乓操作.串并转换.流水线操作.数据接口同步化,都是FPGA/CPLD逻辑设计的内在规律的体现,合理地采用这些设计思想能在FPGA/CPLD设计工作 ...

  6. windbg调试.net程序

    1. 解决线上.NET应用程序的如下问题: 崩溃 CPU高 程序异常 程序Hang死 2. 安装WinDbg: http://msdn.microsoft.com/en-us/windows/hard ...

  7. js文本框验证

    1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...

  8. Oracle 表的连接方式(2)-----HASH JOIN的基本机制3

    HASH JOIN的模式 hash join有三种工作模式,分别是optimal模式,onepass模式和multipass模式,分别在v$sysstat里面有对应的统计信息: SQL> sel ...

  9. 转发 python中file和open有什么区别

    python中file和open有什么区别?2008-04-15 11:30地痞小流氓 | 分类:python | 浏览3426次python中file和open有什么区别?都是打开文件,说的越详细越 ...

  10. Virtualbox中安装Openwrt

    Virtualbox:https://www.virtualbox.org/wiki/DownloadsOpenwrt:http://downloads.openwrt.org/backfire/10 ...