spring3.1与hibernate4集成配置

来源:互联网 发布:自动化编程语言 编辑:程序博客网 时间:2024/05/22 03:46

这是一篇翻译文章,原文: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的最新版本(可能还需要其它依赖,这取决于你的应用)。

Xml代码  收藏代码
  1. <dependency>  
  2.      <groupId>org.springframework</groupId>  
  3.      <artifactId>spring-orm</artifactId>  
  4.      <version>3.1.1.RELEASE</version>  
  5.      <!-- will come with all needed Spring dependencies such as spring-core and spring-beans-->  
  6. </dependency>  
  7. <dependency>  
  8.      <groupId>org.hibernate</groupId>  
  9.      <artifactId>hibernate-entitymanager</artifactId>  
  10.      <version>4.1.1.Final</version>  
  11.      <!-- will come with Hibernate core-->  
  12. </dependency>  
  13. <dependency>  
  14.      <groupId>cglib</groupId>  
  15.      <artifactId>cglib</artifactId>  
  16.      <version>2.2.2</version>  
  17.      <scope>runtime</scope>  
  18. </dependency>  

 

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

 

2.A)Spring集成Hibernate的配置

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

用Hibernate4:

Xml代码  收藏代码
  1. <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
  2. ...  
  3. </bean>  
  4. <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
  5.      <property name="sessionFactory" ref="sessionFactory"/>  
  6. </bean>  
 

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

Xml代码  收藏代码
  1. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  2. ...  
  3. </bean>  
  4.    
  5. <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  6.      <property name="sessionFactory" ref="sessionFactory"/>  
  7. </bean>  
 

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

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

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

Html代码  收藏代码
  1. LocalSessionFactoryBean仅XML映射  
  2. AnnotationSessionFactoryBean可以使用XML映射和/或基于注解的映射  

 


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

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


2.B)JPA Spring配置

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

Xml代码  收藏代码
  1. <jdbc:embedded-database id="dataSource">  
  2.  <jdbc:script location="classpath:jpa/config/schema.sql" />  
  3.  </jdbc:embedded-database>  
  4.    
  5.  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">  
  6.     <property name="dataSource" ref="dataSource" />  
  7.     <property name="persistenceUnitName" value="jpaTest" />  
  8.     <property name="packagesToScan">  
  9.     <list>  
  10.        <value>jpa/config</value>  
  11.     </list>  
  12.     </property>  
  13.     <property name="jpaVendorAdapter">  
  14.        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">  
  15.           <property name="database" value="HSQL" />  
  16.        </bean>  
  17.     </property>  
  18.  </bean>  
  19.    
  20.  <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">  
  21.     <property name="entityManagerFactory" ref="entityManagerFactory" />  
  22.  </bean>  
 



3)你需要CGLIB依赖?

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

Html代码  收藏代码
  1. Java配置(@Bean @Configuration译者注)(详细信息:http://blog.springsource.org/2009/12/22/configuration-simplifications-in-spring-3-0/)  
  2.   
  3. 给没有实现接口的Spring bean添加事务行为,安全,缓存......(更多信息:http://static.springsource.org/spring/docs/current/spring-framework-reference/html/aop.html)  
  4.   
  5. 在做JUnit测试时使用@Transactional注解(这样做通常是让数据库的事务在测试用例结束后回滚,更多细节见这里:http://static.springsource.org/spring/docs/current/spring-framework-reference/html/testing.html)。  
  6.   
  7. ...  
 

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


4)Java配置

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

Java代码  收藏代码
  1. @Bean  
  2. public SessionFactory sessionFactory() {  
  3.  return new LocalSessionFactoryBuilder(dataSource())  
  4.  .addAnnotatedClasses(Person.class, Account.class)  
  5.  .buildSessionFactory();  
  6. }  
 

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

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

 

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

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

0 0