omparação independente de cadeias de dados com JPA

Estou trabalhando com o JPA (Hibernate como provedor) e um banco de dados MySQL subjacent

Tenho uma tabela contendo todos os nomes de ruas na Alemanha. Todo nome de rua tem um número único. Para uma tarefa, tenho que descobrir o número do nome. Para fazer isso, escrevi uma consulta JPQL como a seguinte

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

Infelizmente, existem nomes de ruas na Alemanha que diferem apenas em letras maiúsculas e minúsculas como "Am kleinen Feld" e "Am Kleinen Feld". Obviamente, um deles está errado gramaticalmente, mas como nome para uma rua, ambas as grafias são permitidas e ambas têm um número diferent

Quando envio minha consulta JPQL ao banco de dados, estou usando

query.getSingleResult();

, porque cada nome de rua na tabela é único. Mas com o banco de dados MySQL subjacente, recebo umNonUniqueResultException, porque um banco de dados mySQL está fazendo uma comparação sem distinção entre maiúsculas e minúsculas por padrão. A maneira comum de forçar o mySQL é escrever uma consulta como

SELECT 'abc' LIKE BINARY 'ABC';

como descrito no capítulo 11.5.1 no manual de referência do mySQL, mas não há palavra-chave correspondente no JPQ

Minha primeira tentativa foi fazer anotações no camponame na classe com

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

Anotado assim, o banco de dados está automaticamente fazendo uma comparação com distinção entre maiúsculas e minúsculas, porque uma das strings é binária. Mas quando uso essa solução, encontro problemas ao ler os nomes do banco de dados, para escrevê-los em um arquivo, porque letras como ä, ö, ü são interpretadas incorretament

Eu sei, que o camponame deve obter uma UniqueConstraint e é um dos meus objetivos fazer isso, mas isso só é possível se o banco de dados fizer uma comparação de string com distinção entre maiúsculas e minúscula

xiste uma solução em que eu possa configurar o JPA para fazer comparação de cadeias que diferenciam maiúsculas de minúsculas sem precisar ajustar manualmente o banco de dado

questionAnswers(3)

yourAnswerToTheQuestion