`
sunlong
  • 浏览: 85305 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

spring3.1与hibernate4集成配置

阅读更多

这是一篇翻译文章,原文:http://blog.springsource.org/2012/04/06/migrating-to-spring-3-1-and-hibernate-4-1/

 

为Core-Spring 教程的一部分,我们有一个实验程序用来展示如何集成Spring和JPA/ Hibernate。我们刚刚升级到Spring3.1/ Hibernate的4.1,下面来分享一些技巧。


1)Maven依赖

下面的配置示例是基于Maven的(但如果需要,你可以很容易地转换到Gradle)。在POM中,你应该指定Spring和Hibernate的最新版本(可能还需要其它依赖,这取决于你的应用)。

<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-orm</artifactId>
     <version>3.1.1.RELEASE</version>
     <!-- will come with all needed Spring dependencies such as spring-core and spring-beans-->
</dependency>
<dependency>
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-entitymanager</artifactId>
     <version>4.1.1.Final</version>
     <!-- will come with Hibernate core-->
</dependency>
<dependency>
     <groupId>cglib</groupId>
     <artifactId>cglib</artifactId>
     <version>2.2.2</version>
     <scope>runtime</scope>
</dependency>

 

CGLIB的依赖并不总是需要。在后面会谈到更多细节。

 

2.A)Spring集成Hibernate的配置

Spring提供了几个版本的Hibernate的支持,所以你需要明确指定你使用的版本。

用Hibernate4:

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
...
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
     <property name="sessionFactory" ref="sessionFactory"/>
</bean>
 

如果你是Hibernate 3的工作,你应该用:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
...
</bean>
 
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
     <property name="sessionFactory" ref="sessionFactory"/>
</bean>
 

(包路径是不同的,取决于你用的是Hibernate3还是hibernate4)

使用Hibernate通常有2种常见映射方式:XML和注释。

Spring与Hibernate 3集成时,可以配置2 种SessionFactoryBean:

LocalSessionFactoryBean仅XML映射
AnnotationSessionFactoryBean可以使用XML映射和/或基于注解的映射

 


Spring3.1与Hibernate4集成时,事情变成简单了:只有一个称为LocalSessionFactoryBean的SessionFactoryBean。它可以基于注解或XML的映射方式。

如果您遵循上述2个步骤,你的程序应该可以运行了。


2.B)JPA Spring配置

如果不想直接使用Hibernate,也可以使用JPA作为Hibernate之上的抽象层。下面是一个例子:

<jdbc:embedded-database id="dataSource">
 <jdbc:script location="classpath:jpa/config/schema.sql" />
 </jdbc:embedded-database>
 
 <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="persistenceUnitName" value="jpaTest" />
    <property name="packagesToScan">
    <list>
       <value>jpa/config</value>
    </list>
    </property>
    <property name="jpaVendorAdapter">
       <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
          <property name="database" value="HSQL" />
       </bean>
    </property>
 </bean>
 
 <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
 </bean>
 



3)你需要CGLIB依赖?

答案是很可能是“是”。通常Spring都需要它。下面是一些例子:

Java配置(@Bean @Configuration译者注)(详细信息:http://blog.springsource.org/2009/12/22/configuration-simplifications-in-spring-3-0/)

给没有实现接口的Spring bean添加事务行为,安全,缓存......(更多信息:http://static.springsource.org/spring/docs/current/spring-framework-reference/html/aop.html)

在做JUnit测试时使用@Transactional注解(这样做通常是让数据库的事务在测试用例结束后回滚,更多细节见这里:http://static.springsource.org/spring/docs/current/spring-framework-reference/html/testing.html)。

...
 

注意:CGLIB是一个无人维护的项目,很有可能从Spring3.2开始使用javassist作为替代。更多信息,请参阅https://jira.springsource.org/browse/SPR-5654 。因此,从Spring3.2开始,你可以添加Javassist依赖,而不是CGLIB。


4)Java配置

在Spring中使用Java配置是除了XML和注解配置之外的一个有趣选择。
那么,如何使用Java配置?一个称为LocalSessionFactoryBuilder的新类使事情变得很容易了。

@Bean
public SessionFactory sessionFactory() {
 return new LocalSessionFactoryBuilder(dataSource())
 .addAnnotatedClasses(Person.class, Account.class)
 .buildSessionFactory();
}
 

LocalSessionFactoryBuilder继承Hibernate的配置类,看类名字就知道,它提供一个方便的工厂方式的API,用于在Spring @Configuration类中使用。

所有上述示例代码可以在这里找到:https://github.com/michaelisvy/hibernate-4-spring-3.1-samples

 

最后:推荐一下我的编程电子书下载网站(不用注册啥的,里面放的是我收藏的比较优秀的电子书)E书家

前两天发布了hadoop,cassandra,mongodb电子书被投隐藏,这次发的“软文”不知道大家会不会又投隐藏呢?

 

 

2
2
分享到:
评论
3 楼 zxsqi 2012-07-25  
为什么我使用spring3.1与hibernate4.1集成时出现下面的错误

org.hibernate.HibernateException: No Session found for current thread
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:941)
2 楼 binshangwen 2012-06-25  

...  
</bean>  
1 楼 切萝卜 2012-06-11  
好文,谢谢!
我用的是JPA,当然底层是hibernate, entitymanager 也是Hibernate 4.1.4Final版本

今天出了点错误,异常栈里竟然发现了 org.springframework.orm.hibernate3.xxxx 的东东
有趣呢

不过能用就行了 lol

相关推荐

    spring3.1+hibernate4.1+struts2整合jar包

    在"spring3.1+hibernate4.1+struts2整合jar包"中,包含了这三个框架的最新稳定版本,确保了良好的兼容性和性能。Spring 3.1引入了更多改进,如支持JSR-330标准的依赖注入,增强了对Groovy的支持,以及对AOP的进一步...

    spring3.1 struts2.3 hibernate4.1 jpa集成小例子

    这个"spring3.1 struts2.3 hibernate4.1 jpa集成小例子"是一个典型的Java Web项目,它展示了如何将Spring 3.1、Struts 2.3、Hibernate 4.1和Java Persistence API (JPA) 这四大组件融合到一个应用中。接下来,我们将...

    spring3.1+hibernate4+Jpa Dao

    本文将详细解析"spring3.1+hibernate4+Jpa Dao"集成的相关知识点,帮助你理解和掌握这一体系结构。 **Spring 3.1** Spring 是一个开源的应用框架,它提供了全面的编程和配置模型,用于简化Java企业级应用的开发。...

    spring3.1+hibernate4+struts2 项目例子(注解方式)

    这是一个基于Java技术栈的Web开发项目实例,使用了Spring 3.1、Hibernate 4和Struts2这三个核心框架,并且采用了注解方式进行配置。这个项目例子旨在帮助开发者理解如何在实际开发中整合这三个框架,实现MVC模式的...

    Spring3.1+Hibernate4.0+Struts2.3.1 零配置功能已实现

    在本项目中,"Spring3.1+Hibernate4.0+Struts2.3.1 零配置功能已实现"表示的是一个基于三大主流Java Web框架——Spring、Hibernate和Struts2的集成应用,且重点在于使用了注解(Annotation)进行零配置设置。...

    Spring 3.1 jar包

    在数据访问层,Spring 3.1 引入了JPA 2.0的支持,改进了对Hibernate和其他ORM框架的集成,使得数据库操作更加方便。并且,Spring 3.1 提供了更强大的数据转换和格式化服务,帮助处理不同类型的数据输入和输出。 在...

    spring3.1+hibernate4.0+struts2.3

    描述中提到的"hibernate4.0+spring3.1+struts2.3所需jar我整理好,只需使用即可",意味着已经有人预先完成了这三个框架的配置工作,打包了所有必要的jar包,开发者可以直接使用这些库来快速搭建项目环境,节省了配置...

    Struts2.3+Spring3.1+Hibernate3.6整合的jar包(全)

    这个压缩包"Struts2.3+Spring3.1+Hibernate3.6整合的jar包(全)"包含了进行SSH整合所需的全部依赖库,使得开发者能够在项目中方便地集成这三大框架。 首先,Struts2.3是基于MVC(Model-View-Controller)架构模式的...

    Wicket6.0_Spring3.1_Hibernate4.1_EJB全注解实例

    Spring 3.1引入了对Java配置的支持,简化了配置过程,同时增强了数据访问层的处理,如JDBC模板和Hibernate集成,使得数据库操作更加方便。 **Hibernate 4.1** 是一个流行的对象关系映射(ORM)框架,它允许开发者用...

    struts2.3.4+spring3.1+hibernate4.0整合

    Struts2.3.4、Spring3.1和Hibernate4.0是三个非常重要的Java开源框架,它们在企业级Web应用开发中广泛使用。本文将详细介绍这三个框架的整合过程及其核心概念,帮助开发者理解如何构建一个高效、灵活的Java Web应用...

    Wicket6.0_Spring3.1_Hibernate4.1_JPA全注解实例

    标题 "Wicket6.0_Spring3.1_Hibernate4.1_JPA全注解实例" 描述了一个基于Java技术栈的Web应用开发项目,它整合了四个关键的技术:Wicket 6.0、Spring 3.1、Hibernate 4.1以及JPA。这个项目采用了全注解的方式,使得...

    SSH 配置实例: Spring 3.1 + Hibernate 4.2 + Struts 2.3

    本配置实例将探讨如何在Spring 3.1、Hibernate 4.2和Struts 2.3之间进行集成,以实现数据持久化、业务逻辑处理和前端展现的无缝对接。 首先,Spring框架作为核心容器,负责管理应用对象的生命周期和依赖关系。在...

    struts2.2.3+spring3.1+hibernate3.67整合

    这个"struts2.2.3+spring3.1+hibernate3.67整合"项目旨在将这三个框架集成在一起,以实现更高效、更灵活的后端开发。 Struts2作为MVC(Model-View-Controller)架构的一部分,主要负责处理用户的请求,并将其映射到...

    DWR3.0_Spring3.1_Hibernate4.1_JPA全注解实例

    在本实例中,它作为数据存储后端,与Hibernate集成,执行SQL语句,存储和检索数据。 这个实例项目展示了如何高效地集成DWR、Spring、Hibernate和JPA,实现基于全注解的Java Web应用开发。通过学习和实践这个项目,...

    SSH整合 struts+spring3.1+hibernate3

    2. **Spring与Hibernate的整合** 主要是通过Spring的数据访问/集成模块,配置SessionFactory和TransactionManager,将Hibernate的DAO层组件纳入Spring管理。 3. **Struts与Hibernate的整合** 需要定义ActionForm,将...

    spring3.1相关配置文件

    在这个压缩包中,我们很可能会找到与Spring 3.1配置相关的各种文件,如XML配置文件、Java配置类以及相关文档。 1. **Spring核心**:Spring的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程...

    Spring3.1 + Hibernate4.2.1 + JBPM5.4 + Ehache整合例子

    它允许开发者定义复杂的业务流程,并与其他系统如Spring和Hibernate集成,实现流程驱动的应用。在这个例子中,JBPM被用于处理业务流程的执行和管理。 **Ehcache**: Ehcache是一个广泛使用的Java缓存解决方案,提供...

    Struts2.3+Spring3.1+Hibernate4.1

    Struts2.3、Spring3.1和Hibernate4.1是Java开发中经典的三大框架,它们的集成使用,通常被称为SSH(Struts2、Spring、Hibernate)架构,用于构建高效、可扩展的企业级Web应用程序。这个SSH实例包含了这三个框架的...

Global site tag (gtag.js) - Google Analytics