Как настроить запросы к базе данных H2, чтобы игнорировать конечные пробелы? - PullRequest
0 голосов
/ 09 марта 2020

Я пишу несколько интеграционных тестов для моего Приложения и раскручиваю базу данных H2 в памяти для согласованности и воспроизводимости моих тестов. Моя организация использует базу данных Oracle DB2 SQL, и в некоторых таблицах столбцы VARCHAR дополняются другими пробелами с помощью пробела.

В моих методах Spring Repository, таких как findByDescription(String description), сгенерированный SQL из where description_column = 'description' прекрасно работает в DB2. Но когда тот же SQL запускается для моей реплики H2 базы данных, он завершается ошибкой из-за пробела в конце. Чтобы исправить это в H2, мне пришлось изменить метод репозитория на findByDescriptionStartsWith(String description), который генерирует where description_column like 'description%'.

Похоже, что DB2 предназначена для игнорирования конечных пробелов при выполнении предложения where x = 'text'. Есть ли способ настроить H2, чтобы вести себя так же?

Я попробовал следующее, но это не сработало:

spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:myDb;DB_CLOSE_DELAY=-1;MODE=DB2;preserveWhitespace=true
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.data=classpath:import-x.sql,classpath:import-y.sql,classpath:import-z.sql

Я рассмотрел обрезание конечных пробелов из всех моих SQL операторов импорта, но это сделало бы менее ценным интеграционный тест, так как моя база данных H2 не будет точной копией моей базы данных. Некоторые бизнес-логики c в моем приложении требуют обрезки пробелов из столбцов VARCHAR перед рендерингом ответа, поэтому я не смог бы проверить это, например, если в базе данных H2 не было пробелов.

...