弹簧配置文件示例:
<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>
和persistence.xml jpa文件:
<persistence-unit name="EmployeeService"> <provider>org.hibernate.ejb.HibernatePersistence</provider> </persistence-unit>
如您所见,与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>
但是实际上在我的项目中,我仅使用提供程序配置了持久性单元。而且有效。
所以我的问题是提供商,方言和卖方选项之间有什么区别?我必须全部设置它们,还是可以跳过其中一些?例如,我可以设置为EntityMangerFactory的供应商- Hibernate,设置为事务管理器的方言-Eclipse,还是设置为持久性单元配置的提供商-例如TopLink。
我不清楚。请解释。
将尝试逐行向您解释:
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/> //Should ideally be <bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
Spring
EntityManagerFactory
JpaVendorAdapter
对于您声明的第二个bean:
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory"ref="entityManagerFactory"/> <property name="jpaDialect"ref="jpaDialect"/> </bean>
transactionManager
entityManagerFactory
jpaDialect
hibernate
至于第三个豆
该<provider>告诉Spring使用hibernate提供者和类org.hibernate.ejb.HibernatePersistence是Hibernate的EJB3持久性提供者实现。
<provider>
org.hibernate.ejb.HibernatePersistence
简而言之,您需要配置它们以告知spring应该使用哪个ORM功能。
您的应用程序只能配置持久性和提供程序的原因是因为供应商适配器会自动传递提供的持久性,即HibernatePersistence通过getPersistenceProviderin JpaVendorAdapter。
HibernatePersistence
getPersistenceProvider
仔细阅读文档,以了解这些类如何相互链接。
编辑 :如@TheKojuEffect所指出的,理想情况下,第一个bean的形式应为:
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
谢谢。错过了vendorAdapter。
vendorAdapter
您可以参考:
希望能帮助到你。:)