Hibernate 中的 Order.asc(<String>) 和 Comparable 接口中的 "compareTo" 行为是否相同?

Is Order.asc(<String>) in Hibernate and "compareTo" in Comparable interface behave same?

我使用 Hibernate 从数据库中检索对象集并使用 Order.asc(studentName) 来保持升序。 我使用 Comparator 手动对对象列表进行排序,如下所示。

class NameComparator implements Comparator<Student>
   {
        public int compare(Student z1, Student z2)
            {
                 return z1.getName().compareTo(z2.getName());
            }
   }

Collections.sort(studentList, new NameComparator());

但是这两种情况下返回列表的顺序不一样。

第一行用Hibernate排序,第二行用NameComparator

排序

aaa3, aaa4, bbb5, BBB7, bbb8, BBB8

aaa3, BBB7, BBB8, aaa4, bbb5, bbb8

这是什么原因?

如果您使用Order.asc(studentName),那么您的数据会在数据库中排序。然而 NameComparator 对 Java 应用程序中的数据进行排序。这两个系统不太可能对字符串使用相同的排序。

大多数数据库使用不区分大小写的排序,而 Java 的 compareTo 区分大小写。此外,大多数数据库都有复杂的重音排序机制(重音字母 à 在排序中将接近字母 "a" ),空格,连字符,数字等差异很大来自 Java 的默认排序。最后,语言和地区设置会影响排序顺序。

即使可以在数据库中配置排序并在 Java 中以不同的方式实现,也很难得出匹配的行为。您最好对数据库中的所有内容或 Java 中的所有内容进行排序。大数据时优先选择前者