Независимое от базы данных сравнение строк с JPA

Я работаю с JPA (Hibernate в качестве поставщика) и базой данных MySQL.

У меня есть таблица, содержащая все названия улиц в Германии. Каждое название улицы имеет уникальный номер. Для одного задания мне нужно узнать номер имени. Для этого я написал JPQL-запрос, подобный следующему

"SELECT s FROM Strassencode s WHERE s.name = :name"

К сожалению, в Германии есть названия улиц, которые отличаются только маленькими и заглавными буквами, такими как «Am Kleinen Feld» и «Am Kleinen Feld». Очевидно, что один из них является грамматически неправильным, но как название улицы, оба написания разрешены, и у них обоих есть различное число.

Когда я отправляю свой JPQL-запрос в базу данных, я использую

query.getSingleResult();

из-за того, что каждое название улицы в таблице уникально. Но с базой данных MySQL я получуNonUniqueResultExceptionпотому что база данных mySQL по умолчанию выполняет сравнение без учета регистра. Распространенный способ заставить MySQL написать запрос вроде

SELECT 'abc' LIKE BINARY 'ABC';

как описано в главе 11.5.1 Справочного руководства mySQL, но в JPQL нет соответствующего ключевого слова.

Моей первой попыткой было аннотировать полеname в классе с

@Column(nullable = false, columnDefinition = "varbinary(128)")

В аннотации, подобной этой, база данных автоматически выполняет сравнение с учетом регистра, потому что одна из строк является двоичной. Но когда я использую это решение, у меня возникают проблемы, когда я читаю имена из базы данных, чтобы записать их в файл, потому что такие буквы, как ä, ö, ü, тогда интерпретируются неправильно.

Я знаю, что полеname должен получить uniqueConstraint, и это одна из моих целей, но это возможно только в том случае, если база данных выполнит сравнение строк с учетом регистра.

Есть ли решение, в котором я могу настроить JPA для сравнения строк с учетом регистра без необходимости точной настройки базы данных вручную?

Ответы на вопрос(3)

Ваш ответ на вопрос