Ale*_*ndr 11 java configuration spring hibernate jpa
弹簧配置文件的示例:
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"ref="entityManagerFactory"/>
<property name="jpaDialect"ref="jpaDialect"/>
</bean>
<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
....
</bean>
Run Code Online (Sandbox Code Playgroud)
和persistence.xml jpa文件:
<persistence-unit name="EmployeeService">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)
如您所见,jpa提供程序相关信息设置为3次.在事务管理器bean,实体管理器工厂bean和持久性单元配置中:
<property name="jpaDialect"ref="jpaDialect"/>
...
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
...
<provider>org.hibernate.ejb.HibernatePersistence</provider>
Run Code Online (Sandbox Code Playgroud)
但实际上在我的项目中,我只使用提供程序配置了持久性单元.它奏效了.
所以我的问题是提供商,方言和供应商选择之间的区别是什么?我必须设置所有这些,或者我可以跳过其中一些吗?我可以设置,例如作为EntityMangerFactory的供应商 - Hibernate,作为事务管理器中的方言 - Eclipse和持久性单元配置中的提供者 - 例如,其他东西,TopLink.
这对我来说并不清楚.请解释.
use*_*071 12
将尝试逐行向您解释:
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
//Should ideally be
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
Run Code Online (Sandbox Code Playgroud)
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
,因此可以Spring
将特定于供应商的行为插入到Spring的EntityManagerFactory
创建者中,并且它可作为所有特定于供应商的属性的单一配置点.它是spring自己的自定义实现JpaVendorAdapter
.对于您声明的第二个bean:
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"ref="entityManagerFactory"/>
<property name="jpaDialect"ref="jpaDialect"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
transactionManager
属性是entityManagerFactory
和的jpaDialect
.由于这些属性必须根据具体情况进行hibernate
设置.的entityManagerFactory
和jpaDialect
现在被特别设置为hibernate
(或供应商).至于第三豆
<property name="jpaDialect"ref="jpaDialect"/>
...
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
...
<provider>org.hibernate.ejb.HibernatePersistence</provider>
Run Code Online (Sandbox Code Playgroud)
该<provider>
告诉Spring使用hibernate
提供者和类org.hibernate.ejb.HibernatePersistence
是Hibernate的EJB3持久性提供者实现.
简而言之,您需要配置这些以便告诉spring应该使用哪些ORM的功能.
您的应用程序只配置持久性和提供程序的原因是因为供应商适配器自动传递提供的持久性,即HibernatePersistence
通过getPersistenceProvider
in JpaVendorAdapter
.
修改文档以了解这些类是如何相互关联的.
编辑:正如@TheKojuEffect指出的那样,第一个bean理想情况应该是:
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
Run Code Online (Sandbox Code Playgroud)
谢谢.错过了vendorAdapter
.
你可以参考:
希望能帮助到你.:)
归档时间: |
|
查看次数: |
15696 次 |
最近记录: |