【发布时间】:2017-01-16 22:14:22
【问题描述】:
JPA (Hibernate) 中的 lower 和 upper 函数有问题。在我的应用程序中,用户应该向数据库添加一个新项目,但名称应该是唯一的。为了实现这一点,我需要将用户输入的字符串与数据库中的字符串进行比较,并在检查时忽略大小写。
不幸的是,因为我正在使用 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 班达兹
- MAłY CHEMIK
- MAłY 机械师
- SPRZęT
- ŚPIWóR
- ŚRODEK DEZYNFEKUJąCY
- ŚRODEK CZYSZCZąCY
所有字母都应大写。在数据库中,第一个单词的每个首字母总是大写。问题涉及如下字符:ą, ę, ż, ź, ó, ł - 它们应该看起来像 Ą, Ę, Ż, Ź, Ó, Ł,但是Hibernate 似乎无法将它们识别为仅在大小写方面不同的单个字符。
当我使用较低的函数时,也会发生同样的事情。波兰语字符完全不受影响并且保持不变。
我不知道它是否只涉及波兰字符或其他任何语言。
我将非常感谢有关此事的任何提示。
编辑:我正在使用带有 SQLite 数据库和驱动程序 Xerial 3.8.11.2 的 Hibernate 5.2.2 Final。
EDIT2:如果我尝试使用带有 Hibernate 的本机 SQL 查询来实现,也会发生同样的情况。
【问题讨论】:
-
你用的是哪个版本?
-
@khalilM 我正在使用带有 SQLite 数据库的 Hibernate 5.2.2 Final 和 Xerial 3.8.11.2 :)
-
但是“ł”可以正常工作吗?
-
@khaliM 对不起,我忘了包括那个,“ł”也应该改为“Ł”
-
只需检查您的数据库/休眠或 Jsp UTF-8 编码
标签: java hibernate jpa persistence jpql