У меня проблема с нижней и верхней функцией JPA (Hibernate). В моем приложении пользователь должен добавить новый элемент в базу данных, но имя должно быть уникальным. Для этого мне нужно сравнить введенную пользователем строку со строками в базе данных и игнорировать случай, проверяя это.Функции гибернации нижние и верхние не работают на польских специальных символах
К сожалению, поскольку я использую функцию Hibernate для создания всех данных с верхним расположением (для сравнения), все работает отлично, за исключением польских специальных символов, которые остаются неизменными.
Это код, который я использовал для тестирования, чтобы проверить, работает ли он:
TypedQuery<String> query = em.createQuery("SELECT upper(i.name) FROM Item i", String.class);
for (String name: query.getResultList())
System.out.println(name);
И вот что я получаю:
- CZYSTY BANDAż
- mały Chemik
- MAILY MECHANIK
- SPRZęT
- ŚPIWóR
- ŚRODEK DEZYNFEKUJąCY
- ŚRODEK CZYSZCZąCY
Все буквы должны быть в верхнем регистре. В базе данных каждая первая буква первого слова всегда заглавная. Проблема касается таких символов, как: ą, ę, ż, ź, ó, ł - они должны выглядеть как Ą, Ę, Ż, Ź, Ó, Ł, но Hibernate, похоже, не распознает их как один символ которая отличается только по отношению к делу.
То же самое происходит, когда я использую нижнюю функцию. Польские символы вообще не затрагиваются и остаются неизменными.
Я не знаю, относится ли это только к польским или другим языкам.
Буду очень признателен за любые намеки в этом вопросе.
EDIT: Я использую Hibernate 5.2.2 Final с базой данных SQLite и драйвером Xerial 3.8.11.2.
EDIT2: То же самое происходит, если я попытаюсь достичь этого, используя собственный SQL-запрос с Hibernate.
какая версия вы используете? –
@khalilM Я использую Hibernate 5.2.2 Final и Xerial 3.8.11.2 с базой данных SQLite :) – Bloodlex
но «ł» отлично работает? –