2013-04-16 78 views
0

我正在配置Spring使用Hibernate實現使用JPA。但是我完全不瞭解這個過程。我已經通過遵循不同的博客等來實現它。我使用了EJB 3.1,並且在那裏我有一個persistence.xml。然而,在春天我宣佈了一個LocalContainer ... Bean並提供了一些屬性,並且我沒有persistence.xml。有人能解釋它在Spring中的工作原理以及聲明的bean是什麼?在Spring應用程序中配置JPA

<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
    </property> 
    <property name="packagesToScan" value="com.company.domain" /> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.dialect"> 
       org.hibernate.dialect.PostgreSQL82Dialect 
      </prop> 
     </props> 
    </property> 
</bean> 
+0

如果您需要深入瞭解,您應該分享spring的配置。 –

+0

@HimanshuBhardwaj完成 – LuckyLuke

回答

0

有春天配置與JPA,一個需要的persistence.xml和其他要求只是bean聲明(沒有的persistence.xml)的不同口味。

我要肩負起案例2中的場景:

我們希望的persistence.xml是因爲以下幾個原因,主要的原因:

  1. 數據庫連接的詳細信息。
  2. 被視爲實體或要在其中掃描實體的包的Java類。
  3. 其他供應商特定的設置,如hibernate.show_sql或類似的東西。

現在,如果spring提供了一種方式在bean配置中提到所有這些,那麼就不需要擁有persistence.xml。

在你的bean定義的情況下,讓我們分解它。

<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
    </property> 
    <property name="packagesToScan" value="com.company.domain" /> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.dialect"> 
       org.hibernate.dialect.PostgreSQL82Dialect 
      </prop> 
     </props> 
    </property> 
</bean> 

第一個屬性,dataSource已經包含數據庫設置。

第二個屬性,jpaVendorAdapter特定屬性,以春天

第三個屬性,packagesToScan這是春天的一個屬性來掃描實體,這個我們要麼在做的persistence.xml通過使用「類」標籤的提各班級FQN。

第四屬性,jpaProperties顧名思義可以是春季或persistence.xml中

例如

<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL82Dialect" /> 

既然你已經在Spring bean的所有配置,有沒有需要有一個persistence.xml中

我想補充一個註腳:

春3.1提供了一種替代:LocalContainerEntityManagerFactoryBean接受'packagesToScan'屬性,指定基本包來掃描@Entity類。

希望這個答案您的疑問。

相關問題