Java Spring contaniner配置中的JPA提供者与方言与供应商
spring配置文件的示例:Java Spring contaniner配置中的JPA提供者与方言与供应商,java,spring,hibernate,jpa,configuration,Java,Spring,Hibernate,Jpa,Configuration,spring配置文件的示例: <bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFact
<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>
org.hibernate.ejb.HibernatePersistence
如您所见,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>
...
...
org.hibernate.ejb.HibernatePersistence
但实际上在我的项目中,我只配置了持久性单元和提供者。它成功了
所以我的问题是,提供者、方言和供应商选项之间有什么区别?
我必须全部设置它们吗?或者,我可以跳过其中一些?
例如,我可以将EntityRangerFactory-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"/>
- 您告诉“Spring”配置一个
,其属性是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>
谢谢。错过了供应商适配器
你可以参考:
希望有帮助。:) 很好的解释,但我认为你的回答错了。在第一个bean
jpaDialect
中,我认为您的意思是jpaVendorAdapter
。如果你能更正你的答案会更好。谢谢你的回复。我浏览了HibernateJavaEndorapter,找到了getJPadioct()和getPersistenceProvider()方法。我认为只使用HibernateJavaEndorapter配置实体管理器工厂是正确的。这就足够了,因为可以从适配器类接收jpa方言和jpa提供程序。
<property name="jpaDialect"ref="jpaDialect"/>
...
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
...
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>