Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring contaniner配置中的JPA提供者与方言与供应商_Java_Spring_Hibernate_Jpa_Configuration - Fatal编程技术网

Java Spring contaniner配置中的JPA提供者与方言与供应商

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

spring配置文件的示例:

<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"/>