2009-09-16 62 views
0

我目前使用spring來進行注入。 Hibernate使用postgres方言進行正常運行,但我想使用HSQL進行DBUnitils數據庫測試。Java:DBunitils + Spring:不同的Hibernate-Dialect

Spring的配置包含此:

<!-- Hibernate session factory --> 
<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
      <prop key="use_outer_join">${hibernate.use_outer_join}</prop> 

      <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop> 
      <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop> 
      <prop key="hibernate.cache.provider_class">${hibernate.cache.provider}</prop> 

      <prop key="hibernate.connection.pool_size">10</prop> 
      <prop key="hibernate.jdbc.batch_size">1000</prop> 
      <prop key="hibernate.bytecode.use_reflection_optimizer">true</prop> 

     </props> 
    </property> 
    <property name="annotatedClasses"> 
     <list> 
      <value>de.dbruhn.relations.model.Relation</value> 
      <value>de.dbruhn.relations.model.RelationData</value> 
      <value>de.dbruhn.relations.model.RObject</value> 
      <value>de.dbruhn.relations.model.Type</value> 
     </list> 
    </property> 

    <property name="schemaUpdate" value="${hibernate.schemaUpdate}"/> 
</bean> 

字段得到Maven的資源過濾取代。

彈簧Configruation爲DBUnitils包含此:

<bean id="dataSource" class="org.unitils.database.UnitilsDataSourceFactoryBean"/> 
</beans> 

,因此從與UnitilsDataSource我跑的配置將覆蓋數據源。

問題:我不能使用Postgres-Dialect對HSQL測試數據庫運行測試,因爲有些命令不工作。 我想到的唯一解決方案是:切換maven中的資源過濾器,但我必須手工完成(通過在每個maven調用中提供「-P TEST」)。那麼重寫hibernate.dialect是不是有可能?

謝謝!

回答

0

你應該看看在春天使用PropertyPlaceHolderConfigurer來改變配置。這樣你只需要爲不同的環境提供不同的配置文件,spring xml保持不變。

你可以像this一樣加載配置文件。

+0

這對我有幫助嗎?我是否必須將整個會話工廠bean複製到第二個ApplicationContext.xml?即使我將所有常量放入屬性文件中,我也必須保持文件同步(例如annotatedClasses)。 – theomega 2009-09-16 20:10:16

4

您通常不需要指定方言,Hibernate會通過查看底層數據源來計算出來。如果你想迫使Hibernate使用特定的方言,你只需要指定方言。

在你的情況,你應該只能夠完全刪除方言屬性,它應該在postgres和hsql中工作,而不需要修改配置。

+1

感謝您的答案,但如果我從ApplicationContext.xml中刪除dialect-spec,我得到這個錯誤: org.springframework.orm.hibernate3.HibernateSystemException:未設置方言。設置屬性hibernate.dialect .;嵌套的異常是org.hibernate.HibernateException:未設置方言。設置屬性hibernate.dialect。 – theomega 2009-09-16 19:57:09

相關問題