为什么在JpaTransactionManager中使用jpadialect

时间:2014-07-29 04:06:06

标签: java spring jpa jta

我正在从Spring in Action学习spring 3.0。

在那里讨论了在JpaTranactionManager中使用jpadialect的重要性

<bean id="transactionManager"
              class="org.springframework.orm.jpa.JpaTransactionManager">
          <property name="entityManagerFactory" ref="entityManagerFactory" />
          <property name="jpaDialect" ref="jpaDialect" />
        </bean>
<bean id="jpaDialect"
        class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />

然而,方言已经通过jpaVendorAdaptor在entityManagerFactory的声明中出现。

<bean id="entityManagerFactory" class= "org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
</bean>
<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
  <property name="database" value="HSQL" />
  <property name="showSql" value="true"/>
  <property name="generateDdl" value="false"/>
  <property name="databasePlatform"
            value="org.hibernate.dialect.HSQLDialect" />
</bean>  
 <bean id="dataSource" class="org.springframework.jdbc.datasource. DriverManagerDataSource">
   <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
   <property name="url" value="jdbc:hsqldb:hsql://localhost/spitter/spitter" />
   <property name="username" value="sa" />
   <property name="password" value="" />
 </bean>

在JpaTranactionManager中使用方言是多余的吗?

1 个答案:

答案 0 :(得分:1)

jpaDialect中使用JpaTransactionManagerjpaVendorAdapter配置来说并不多余。他们的配置有不同的目的。

您可以参考this post并提供详细解释。