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的最新版本(可能还需要其它依赖,这取决于你的应用)。
- <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电子书被投隐藏,这次发的“软文”不知道大家会不会又投隐藏呢?
- spring3.1与hibernate4集成配置
- Spring3 集成 Hibernate4 配置
- Spring3与Hibernate4整合配置
- Spring3.1.2(MVC)与Hibernate4集成
- 集成spring3、hibernate4、junit
- 集成spring3、hibernate4、junit
- 集成spring3、hibernate4、junit
- 集成spring3、hibernate4、junit
- 集成spring3,hibernate4
- spring3.1与hibernate4整合
- spring3.1与hibernate4整合
- Proxool在web项目中的配置,以及与spring3、hibernate4的集成
- 关于spring3.2.4与hibernate4.1.2 集成的一些注意事项以及配置
- spring3.1.1与hibernate4.1.5与struts2.3.4集成
- Hibernate4.1+Spring3.1配置变动
- springmvc+spring3.1+hibernate4配置事务不起作用
- Hibernate4+Spring3 配置数据源
- Spring3+hibernate4整合配置
- android布局管理器之TableLayout
- [Linux] Linux使用中的一些记录
- Matlab编译cuda的.cu文件
- 拓扑排序
- 僵尸进程与孤儿进程
- spring3.1与hibernate4集成配置
- Linux常用命令
- Java Thread.join详解
- 牛人必修 Ant编译android工程 ,并Proguard代码混淆,v4混淆配置
- 《Linux操作系统下C语言编程入门》 - linux 进程
- lucene&solr cache在sort、facet等方面的应用解析
- 杨辉三角的变形-matlab-java
- C++:多维数组的动态分配(new)和释放(delete)
- 《设计模式》学习笔记——桥接模式