`
hz_chenwenbiao
  • 浏览: 1007978 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Org.springframework.orm.hibernate3.*类讲解(转)

阅读更多

org.springframework.orm.hibernate3.SessionFactoryUtils

 

Hibernate Session处理协助类,允许事务范围内的Session重用。同样提供了异常信息的转义。

支持受Spring管理及不受Spring管理的JTA事务同步(例如简单JTA或者EJB CMT),透明的支持事务范围内的Hibernate Sessions。注意:对于不受Spring管理的JTA事务,必须在Hibernate的配置当中指定JTA的TransactionManagerLookup。

 

org.springframework.orm.hibernate3.SessionHolder

 

包装了Hibernate Session及Hibernate事务的Session holder。在一个给定的Session工厂(SessionFactory)中的Hibernate事务管理对象( HibernateTransactionManager )绑定该类实例至当前线程。

 

org.springframework.orm.hibernate3.SpringSessionContext

 

Hibernate 3.1's CurrentSessionContext接口实现类,SessionFactoryUtils通过该类实例获得spring管理下与当前线程绑定的Session。

Used by Spring's LocalSessionFactoryBean when told to expose a transaction-aware SessionFactory. This is the default as of Spring 2.5.

你可以自定义不同的CurrentSessionContext接口实现,并在设置SessionFactory工厂时,通过hibernate.current_session_context_class属性指定您的CurrentSessionContext实现。

 

 

org.springframework.orm.hibernate3.LocalSessionFactoryBean

 

FactoryBean接口创建了Hibernate的Session工厂。这是在spring应用环境中安装Hibernate Session工厂的常用方式(请参考FactoryBean接口);
通过依赖注入,这个Session工厂可以被传递到基于Hibernate支持的Dao中。

对于该类的配置及可以通过xml格式的Hibernate配置文件(通过制定“configLocation”属性),也可以完全通过该类完成。一个典型的配置总是由
一个或者多个"mappingResources"属性,"hibernateProperties" 属性(不是绝对必须的), 和一个“dataSource”属性(SessionFactory使用)完成。
“dataSource”属性同样可以由Hibernate的配置文件指定。但是这里的“dataSource”属性(指当前类内部的)支持任何基于Spring配置的DataSource,
而不仅仅是Hibernate所依赖的数据库连接提供者。

从单个数据库应用到分布式事务,SessionFactory的处理策略适用于大多数的应用。Hibernate事务管理对象或者JTA事务管理对象可用于不同的
场合,JTA事务管理对象仅用于多个数据库的事务处理。

默认情况下这个工厂对象将会派生出一个事务感知(transaction-aware)的SessionFactory型代理对象。无论使用任何事物管理策略
(local/JTA/EJB CMT)或者任何事物同步机制(Sping/JTA),Spring均可以使数据在使用原生Hibernate Session工厂,getCurrentSession()方法
的同时仍旧可以参与Spring管理的当前事务过程(ThreadLocal)。此外,getCurrentSession()方法对请求范围内的Session对象(由OpenSessionInViewFilter / OpenSessionInViewInterceptor管理的)提供了完美支持。

 

org.springframework.orm.hibernate3.HibernateTransactionManager

HibernateTransactionManager是一个为Hibernate Session工厂提供服务的PlatformTransactionManager接口实现。
HibernateTransactionManager和一个绑定在当前线程上的Hibenrate Session对象进行捆绑。SessionFactoryUtils对
象和HibernateTemplate对象可以感知当前线程内的Session对象,并自动参与当前线程内的事务处理。Using either
of those or going through SessionFactory.getCurrentSession() is required for Hibernate access code that needs
to support this transaction handling mechanism.


支持自定义的隔离级别,及Hibernate事务超时设定。

这个事务管理对象很适合于那种使用单Hibernate Session工厂的事务型数据访问应用,但是它也同样支持在一个事务中
直接的数据源访问(例如相同数据源的JDBC代码访问)。这样就允许混合型的应用代码,例如使用Hibernate访问,使用
JDBC访问(并不知道同时使用了Hibernate)!Application code needs to stick to the same simple Connection lookup
pattern as with DataSourceTransactionManager (i.e. DataSourceUtils.getConnection(javax.sql.DataSource) or going
through a TransactionAwareDataSourceProxy).

 

....................

 

org.springframework.orm.hibernate3.HibernateAccessor

HibernateTemplate和HibernateInterceptor父类,定义了像SessionFactory,flushing行为等通用属性。

不要尝试直接使用该类。请参考HibernateTemplate和HibernateInterceptor.

 

org.springframework.orm.hibernate3.HibernateInterceptor

这个拦截器在进入方法调用之前为当前线程绑定一个新的Hibernate Session实例,在方法执行完毕之后关闭并移除。
如果当前线程内已存在Session实例(来自HibernateTransactionManager对象或者已被Hibernate拦截器拦截的方法
环境),这个拦截器将会使用已有的Session实例。

应用代码必须通过SessionFactoryUtils.getSession方法或者更好的方式——Hibernate自己的SessionFactory.getCurrentSession()
方法获得与当前线程绑定的Session对象。通常情况下,代码如下所示:

public void doSomeDataAccessAction() {    
   Session session = this.sessionFactory.getCurrentSession();    
   ...    
  // No need to close the Session or translate exceptions!    
}   

 

注意:通过委托的SessionFactoryUtils.convertHibernateAccessException方法,拦截器将会自动的将Hibernate异常
转换成与org.springframework.dao异常体系兼容的异常(像HibernateTemplate那样)。如果想要获取原始异常,可
以关闭这个功能。

这个类可以认为是HibernateTemplate回调方法的一个替代方案。优点是:
    1)回调方法不需要使用匿名类。
    2)在数据访问的应用代码中可以抛出任何应用异常。
缺点是依赖额外的拦截配置。然而,需要注意的是,通常情况下,在一个事务内部执行的数据访问代码不需要配置该
拦截器。在事务开始的起点将会有一个与线程绑定的Session实例,所以增加这个拦截器仅仅是在需要对Session实例
的属性微调例如flush模式 - 或者需要异常转义的时候。

 

org.springframework.orm.hibernate3.HibernateTemplate


简化Hibernate数据访问代码的辅助类。自动转换Hibernate原生异常为符合org.springframework.dao异常体系的DataAccessExceptions异常。

最重要execute方法支持实现了HibernateCallback接口的Hibernate访问代码。无论是HibernateCallback接口实现或
者其他的调用代码,无需关心对Session对象的获取和关闭以及Session对象的生命期异常。对典型的单步骤调用,提
供了多种便利方法(find, load, saveOrUpdate, delete)。

在一个service实现中可以通过一个SessionFactory引用直接获得该实例,或者在一个应用的上下文环境中获得一个配
置好的实例作为该service的内部引用。注意:SessionFactory应当永远以bean的形式被配置在应用的上下文当中,第
一种情况下直接提供给service实现,第二种情况提供模板实例引用。

分享到:
评论

相关推荐

    Spring--4.Spring整合hibernate

    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="configLocation" value="classpath:hibernate.cfg.xml"/> ``` 3. **配置事务管理器**: ...

    Spring 2.0学习文档 和Spring API文档

    3. **org.springframework.aop** 包:包含了AOP相关的类和接口,如Advisor、Pointcut、Aspect等,用于实现切面编程。 4. **org.springframework.jdbc** 包:提供了JDBC模板和数据源的抽象,简化了数据库操作。 5. ...

    Spring API

    5. **AOP**:`org.springframework.aop` 和 `org.aspectj.lang` 包含了AOP相关的接口和类,如`org.springframework.aop.framework.ProxyFactoryBean` 可用于创建代理对象。 6. **Web MVC**:Spring的Web MVC模块提供...

    SpringBoot整合Hibernate纯注解版

    <groupId>org.springframework.boot <artifactId>spring-boot-starter-data-jpa <groupId>org.hibernate <artifactId>hibernate-entitymanager <!-- 添加数据库驱动,例如MySQL --> <groupId>mysql ...

    spring依赖包讲解.doc

    ORM(对象关系映射)集成中,Hibernate相关的jar(ehcache.jar、hibernate2.jar、odmg.jar)用于Spring的Hibernate支持,而iBATIS(ibatis-common.jar、ibatis-sqlmap.jar、ibatis-sqlmap-2.jar)则用于iBATIS集成。...

    细说如何整合spring+hibernate +jsf中的代码

    - 配置Hibernate SessionFactory,如`org.springframework.orm.hibernate5.LocalSessionFactoryBean`,并指定Hibernate配置文件。 2. **事务管理** - 使用Spring的PlatformTransactionManager接口,如`org.spring...

    struts2.2.3+spring3.1.0+hibernate4.0整合

    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> ``` 3. **配置Hibernate**: - 在Hibernate的配置文件`hibernate.cfg.xml`中设置数据库连接、...

    java框架配置[整理].pdf

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation" value="classpath:hibernate.cfg.xml"/> ...

    spring注解整合hibernate

    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <!-- Hibernate配置信息 --> ``` **3. 使用注解配置Hibernate实体** 在实体类上使用Hibernate的注解,如`@...

    spring 源码讲解

    通过对`org.springframework.beans.factory.BeanFactory`接口及其实现类的源码研究,可以深入了解Bean的管理机制。 4. **IoC容器**:IoC(Inversion of Control)是依赖注入的另一种表述,Spring的IoC容器通过反转...

    ssh(structs,spring,hibernate)框架中的上传下载

     需要指定的是Spring 1.2.5提供了两套Hibernate的支持包,其中Hibernate 2相关的封装类位于org.springframework.orm.hibernate2.*包中,而Hibernate 3.0的封装类位于org.springframework.orm.hibernate3.*包中,...

    刘伟_Hibernate与Struts2和Spring组合开发

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect <value>...

    Spring Hibernate 整合要点之JPA

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <bean id="transactionManager" class="org.springframework.orm.jpa.Jpa...

    Spring开发包+SpringAPI(中文版)

    此外,Spring的测试支持也是其强大之处,开发者可以在`org.springframework.test`包中找到相关的类和接口,以进行单元测试和集成测试。 在学习Spring时,理解其主要模块的职责和它们之间的交互至关重要。例如,...

    spring配置sessionFactory(spring3.2.3+hibernate4.2.2)

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="configLocation" value="classpath:hibernate.cfg.xml"/> ...

    EXT3.0.pdf

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx=...

    JSF+Spring+Hibernate的实例讲解.doc

    JavaServer Faces (JSF)、Spring Framework 和 Hibernate 是构建现代 Web 应用程序的三个关键技术。JSF 是一种用户界面框架,适用于基于 Model-View-Controller (MVC) 架构的应用程序,提供了丰富的组件库和事件驱动...

    Spring Framework3教程

    Spring Framework 3教程 ...提供的文档如《Spring Framework 3教程.docx》、《spring_tutorial.pdf》和《Spring Framework 3教程.pdf》将深入讲解这些概念,并通过实例指导读者如何在实践中应用Spring Framework 3。

Global site tag (gtag.js) - Google Analytics