Java: DBunitils + Spring: другой диалект Hibernate

В настоящее время я использую spring для инъекции зависимостей. Hibernate использует диалект postgres для обычного запуска, но я хочу использовать HSQL для тестирования банка данных DBUnitils.

Моя Spring-Configuration содержит следующее:

<!-- 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.

Spring-Configruation для DBUnitils содержит следующее:

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

и поэтому переопределяет источник данных из моей конфигурации запуска с помощью UnitilsDataSource.

Проблема: я не могу запустить тесты с использованием Postgres-Dialect для базы данных HSQL-Test-Database, потому что некоторые команды не работают. Единственное решение, которое пришло мне в голову: переключение фильтра ресурсов в maven, но Я должен сделать это вручную (проверив «-P TEST» при каждом вызове maven). Так нет ли возможности переопределить hibernate.dialect?

Спасибо!


person theomega    schedule 16.09.2009    source источник


Ответы (2)


Возможно, вам следует взглянуть на использование PropertyPlaceHolderConfigurer весной, чтобы изменить конфигурацию. Таким образом, вам нужно только указать другой файл конфигурации для разных сред, Spring xml останется прежним.

И вы можете загрузить файл конфигурации, например этот.

person Michael Wiles    schedule 16.09.2009
comment
Как это мне поможет? Нужно ли копировать весь компонент сеанса-фабрики во второй ApplicationContext.xml? Даже если я помещу все константы в файл свойств, мне придется синхронизировать файлы (например, аннотированные классы). - person theomega; 17.09.2009

Обычно вам вообще не нужно указывать диалект, Hibernate выяснит это, просмотрев базовый источник данных. Вам нужно только указать диалект, если вы хотите заставить Hibernate использовать определенный диалект.

В вашем случае вы должны просто полностью удалить свойство диалекта, и оно должно работать в postgres и hsql без изменения конфигурации.

person skaffman    schedule 16.09.2009
comment
Спасибо за ответ, но если я удалю спецификацию диалекта из ApplicationContext.xml, я получу эту ошибку: org.springframework.orm.hibernate3.HibernateSystemException: диалект не был установлен. Установите свойство hibernate.dialect.; вложенным исключением является org.hibernate.HibernateException: диалект не был установлен. Установите свойство hibernate.dialect. - person theomega; 16.09.2009