Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate函数lower和upper不处理特殊字符_Java_Hibernate_Jpa_Persistence_Jpql - Fatal编程技术网

Java Hibernate函数lower和upper不处理特殊字符

Java Hibernate函数lower和upper不处理特殊字符,java,hibernate,jpa,persistence,jpql,Java,Hibernate,Jpa,Persistence,Jpql,我对JPA(Hibernate)中的上下函数有问题。在我的应用程序中,用户应该向数据库添加一个新项,但名称应该是唯一的。为了实现这一点,我需要将用户输入的字符串与数据库中的字符串进行比较,并在检查时忽略大小写 不幸的是,当我使用Hibernate函数使所有数据大写时(为了进行比较),除了保持不变的波兰语特殊字符外,一切都正常 这是我用于测试目的的代码,用于检查它是否工作: TypedQuery<String> query = em.createQuery("SELECT upper(

我对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);
TypedQuery query=em.createQuery(“从项目i中选择上限(i.name)”,String.class);
for(字符串名称:query.getResultList())
System.out.println(名称);
这就是我得到的:

  • 捷克班达
  • 马伊·切米克
  • MAłY MECHANIK
  • 斯普兹特
  • ŚPIWóR
  • 罗德克·德津菲库西
  • ŚRODEK CZYSZCZąCY
所有字母都应大写。在数据库中,第一个单词的每个第一个字母都是大写的。问题涉及到这样的字符:ą、ę、ż、ź、ó、ł——它们应该看起来像Ą、Ę、Ż、Ó、Ł,但Hibernate似乎没有将它们视为一个单独的字符,这只是在案例上有所不同

当我使用一个较低的函数时,同样的情况也会发生。波兰语字符完全不受影响,并且保持不变

我不知道它是否只涉及波兰语字符或其他语言

如果能在这件事上得到任何暗示,我将不胜感激

编辑:我正在使用Hibernate 5.2.2 Final和SQLite数据库以及驱动程序Xerial 3.8.11.2


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编码