как я могу сделать запросы Spring JDBC независимыми от базы данных?

Я использую Spring Jdbc 3.0.5 RELEASE, и мы используем базу данных DB2 в соответствии с требованиями нашего клиента. Мы хотим запустить наши тесты для базы данных HSQL, потому что мы не хотим нарушать первичные ключи DB2 (которые реализуются путем создания последовательностей) с нашими тестами.

И я использовал тег «jdbc: embedded-database» в ApplicationContext.xml, связанный с тестами, для создания необходимых таблиц и вставки фиктивных данных для тестов (которые прошли успешно).

Но теперь, очевидно, мы сталкиваемся с проблемами с синтаксисом запросов, которые мы написали на диалекте DB2 на уровне DAO.

Каково наилучшее возможное решение для преодоления этой проблемы?

И есть ли какие-либо «критерии гибернации», такие как API, которые поддерживают Spring jdbc, чтобы наши запросы, связанные с соединениями (которые более болезненны при работе с HSQL), выполнялись на любой базе данных

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


person Varun Tamiri    schedule 03.08.2012    source источник
comment
Пожалуйста, не говорите «переключиться в спящий режим», что для меня является известным решением!....   -  person Varun Tamiri    schedule 03.08.2012
comment
Это не обязательно должен быть спящий режим. Подойдет любая реализация JPA. Но если вы написали буквальные JDBC-запросы, то они конечно не будут независимыми от базы данных. Вам придется переписать их для другой базы данных. Или напишите второй набор запросов и добавьте слой, который выбирает правильный набор на основе базовой базы данных. Но поскольку вам все равно придется их переписывать, вы могли бы переписать их на что-то вроде EJBQL и переключиться на использование JPA вместо JDBC.   -  person aroth    schedule 03.08.2012
comment
На данный момент мы изменили запросы, чтобы не использовать какие-либо специфические функции DB2, но переход на реализацию на основе JPA будет намного лучшим вариантом.   -  person Varun Tamiri    schedule 12.08.2012


Ответы (1)


JPA — отличное решение, поскольку оно дает вам стандартный интерфейс для операций с базой данных, позволяя довольно свободно менять реализации движка (Hibernate, Toplink и т. д.).

Если вам нужно, вы всегда можете смешивать и сочетать JPA и JDBC для ситуаций, когда JPA не дает вам достаточной гибкости.

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

Как всегда, избегайте расширений для конкретных поставщиков для максимальной переносимости.

person Rich Cowin    schedule 31.08.2012