Java Hibernate函数lower和upper不处理特殊字符
我对JPA(Hibernate)中的上下函数有问题。在我的应用程序中,用户应该向数据库添加一个新项,但名称应该是唯一的。为了实现这一点,我需要将用户输入的字符串与数据库中的字符串进行比较,并在检查时忽略大小写 不幸的是,当我使用Hibernate函数使所有数据大写时(为了进行比较),除了保持不变的波兰语特殊字符外,一切都正常 这是我用于测试目的的代码,用于检查它是否工作:Java Hibernate函数lower和upper不处理特殊字符,java,hibernate,jpa,persistence,jpql,Java,Hibernate,Jpa,Persistence,Jpql,我对JPA(Hibernate)中的上下函数有问题。在我的应用程序中,用户应该向数据库添加一个新项,但名称应该是唯一的。为了实现这一点,我需要将用户输入的字符串与数据库中的字符串进行比较,并在检查时忽略大小写 不幸的是,当我使用Hibernate函数使所有数据大写时(为了进行比较),除了保持不变的波兰语特殊字符外,一切都正常 这是我用于测试目的的代码,用于检查它是否工作: TypedQuery<String> query = em.createQuery("SELECT upper(
TypedQuery<String> query = em.createQuery("SELECT upper(i.name) FROM Item i", String.class);
for (String name: query.getResultList())
System.out.println(name);
TypedQuery query=em.createQuery(“从项目i中选择上限(i.name)”,String.class);
for(字符串名称:query.getResultList())
System.out.println(名称);
这就是我得到的:
- 捷克班达
- 马伊·切米克
- MAłY MECHANIK
- 斯普兹特
- ŚPIWóR
- 罗德克·德津菲库西
- ŚRODEK CZYSZCZąCY
EDIT2:如果我试图通过Hibernate使用本机SQL查询实现这一点,也会发生同样的情况。我已经找到了解决方案。事实证明,SQLite不支持Unicode排序规则。在使用上、下函数或排序时,它只能支持ASCII拉丁字符 有一个扩展(SQLite ICU扩展),为了使用Unicode排序规则(或其他排序规则),必须使用该扩展编译SQLite,但就我而言,它并不像我希望的那样简单。我决定将数据库提供程序更改为H2,默认情况下,H2支持Unicode排序,无需执行任何修改,现在它就像一个符咒一样工作:)
所以这不是Hibernate的错,而是SQLite的错。非常感谢您的帮助:)我已经找到了解决方案。事实证明,SQLite不支持Unicode排序规则。在使用上、下函数或排序时,它只能支持ASCII拉丁字符 有一个扩展(SQLite ICU扩展),为了使用Unicode排序规则(或其他排序规则),必须使用该扩展编译SQLite,但就我而言,它并不像我希望的那样简单。我决定将数据库提供程序更改为H2,默认情况下,H2支持Unicode排序,无需执行任何修改,现在它就像一个符咒一样工作:)
所以这不是Hibernate的错,而是SQLite的错。非常感谢您的帮助:)您使用的是哪个版本?@khalilM我正在使用Hibernate 5.2.2 Final和Xerial 3.8.11.2与SQLite数据库:)但是“ł”工作正常?@khaliM很抱歉,我忘记了将“ł”改为“Ł”toojust检查您的数据库/hibernate或Jsp UTF-8编码您使用的是哪个版本?@khalilM我正在使用hibernate 5.2.2 Final和Xerial 3.8.11.2与SQLite数据库:)但是“ł”工作正常?@khaliM抱歉,我忘记了将“ł”改为“Ł”ToJust检查您的数据库/hibernate或Jsp UTF-8编码