2013-09-09 5 views
7

У меня есть следующая конфигурация в приложении Spring + JPA + Hibernate, используя packagesToScan, чтобы избежать наличия файла persistence.xml.Приоритет между свойствами в HibernateJPAVendorAdapter и JPAProperty

<!-- Configure JPA Implementation --> 
<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
     <property name="database" value="${jpa.database}" /> 
     <property name="showSql" value="${jpa.showSql}" /> 
     <property name="databasePlatform" value="${jpa.dialect}" /> 
     <property name="generateDdl" value="${jpa.generateDdl}" /> 
</bean> 

<!-- Create the JPA EntityManagerFactory --> 
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource"/> 
     <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/> 
     <property name="packagesToScan"> 
      <list> 
       <value>com.proyectofinal.model</value> 
      </list> 
     </property> 
     <property name="jpaProperty"> 
      <props> 
       <entry key="hibernate.cache.use_second_level_cache" value="true"/> 
       <entry key="hibernate.cache.use_query_cache" value="true"/> 
       <entry key="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletonEhCacheProvider"/> 
       <entry key="hibernate.show_sql" value="true" /> 
       <entry key="hibernate.use_sql_comments" value="false" /> 
       <entry key="hibernate.format_sql" value="true" /> 
       <entry key="hibernate.dialect" value="org.hibernate.dialect.MYSQLDialect" /> 
       <entry key="hibernate.temp.use_jdbc_metadata_defaults" value="false"/> 
      </props> 
     </property> 
</bean> 

Мой вопрос:

  • ли это необходимо определить в обоих местах свойства, как show_sql или диалект?
  • Какой из них имеет приоритет над другим?
  • Какое место более целесообразно определить?

Заранее спасибо

ответ

4

Свойства, указанные в JpaVendorAdapter не должны быть продублированы в списке дополнительных свойств. Если бы это было так, то JpaVendorAdapter было бы бесполезным.

Также в вашей конфигурации используйте либо database, либо databasePlatform не используйте оба варианта.

Свойства, которые могут быть сконфигурированы с помощью JpaVendorAdapter Я бы установил прямо там, это спасло бы вам пару строк, и вам не нужно будет помнить загадочный спящий (или который когда-либо поставщик) использует имя свойства.

Недвижимость, в которой вы нуждаетесь, является следующей.

<props> 
    <entry key="hibernate.cache.use_second_level_cache" value="true"/> 
    <entry key="hibernate.cache.use_query_cache" value="true"/> 
    <entry key="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletonEhCacheProvider"/> 
    <entry key="hibernate.use_sql_comments" value="false" /> 
    <entry key="hibernate.format_sql" value="true" /> 
    <entry key="hibernate.temp.use_jdbc_metadata_defaults" value="false"/> 
</props> 

Если вы определяете их в обоих местах один из JpaVendorAdapter игнорируются.

2

В дополнение к @M. Ответ Deinum, в если вы решите использовать jpaProperties над jpaVendorAdapter, вам необходимо установить persistenceProvider свойство, так как это, как правило, получают из jpaVendorAdapter

, например

<property name="persistenceProvider"> 
    <bean class="org.hibernate.ejb.HibernatePersistence"/> 
</property> 

Кроме того, jpaProperty должен быть jpaProperties

+0

Спасибо за ответ! Especifying HibernateJPAVendorAdapter не хватит? –

+0

Я просто говорю, что если бы вы установили 'jpaProperties' самостоятельно без установки' jpaVendorAdaptor', тогда вам нужно будет установить 'persistenceProvider'. Также может быть достаточно указать jpaVendorAdaptor по умолчанию (например, без свойств), хотя я никогда не пробовал его. – ikumen

+0

Отлично! Я не расстроился хорошо. Теперь я сделал !! благодаря –

 Смежные вопросы

  • Нет связанных вопросов^_^