首页 > 代码库 > Spring整合JPA改进办法
Spring整合JPA改进办法
在标准JPA中,持久化单元默认被定义在META-INF/persistence.xml文件中,并且通过@Entity注解搜索获得。但是大多数情况下,持久化单元不会仅仅存在一个,并且数据源也不会是一个,基于这个原因,Spring提供了一个可选方案,即通过LocalEntityManagerFactoryBean和LocalContainerEntityManagerFactoryBean进行管理。localEntityManagerFactoryBean扩展功能太少,这个不说,我们以LocalContainerEntityManagerFactoryBean为例。
我们的一般做法是:
- 创建persistence.xml文件
- 配置Spring上下文
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> <persistence-unit name="hibernatePersistenceUnit" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.hbm2ddl.auto" value=http://www.mamicode.com/"update" />>然后再在Spring中引入persistence.xml配置文件,
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" p:persistenceXmlLocation="classpath*:META-INF/persistence.xml" p:persistenceUnitName="hibernatePersistenceUnit" p:dataSource-ref="jpaDataSource" p:jpaVendorAdapter-ref="hibernateVendor"/> <bean id="hibernateVendor" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" p:showSql="false"/>如何改进
基于文档需求,我们希望移除persistence.xml文件,但是如何声明外部配置文件从而关联到ORM框架中呢?并且如何让EntityManagerFactory工厂类知道我们当初配置的实体在哪里。
可以这样:
- 删除META-INF/persistence.xml配置文件
- 声明packagesToScan属性
- 声明jpaPropertyMap属性
最终配置如下:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" p:packagesToScan="org.krams.tutorial.domain" p:dataSource-ref="jpaDataSource" p:jpaVendorAdapter-ref="hibernateVendor" p:jpaPropertyMap-ref="jpaPropertyMap"/> <util:map id="jpaPropertyMap"> <entry key="hibernate.hbm2ddl.auto" value=http://www.mamicode.com/"update"/>>这样做的好处是,当真正需要调用相应的实体对象时再进行数据源的配置,让Spring自动管理工厂,这样即使数据源再多也不怕出现冲突。
Spring整合JPA改进办法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。