2016-04-15 4 views
0

Ich verwende Hibernate, um einen Satz von Objekten aus der Datenbank abzurufen und Order.asc (studentName) zu verwenden, um die aufsteigende Reihenfolge beizubehalten. Ich verwende Comparator, um eine Objektliste manuell zu sortieren, wie unten.Ist Order.asc (<String>) in Hibernate und "compareTo" in Vergleichbare Schnittstelle verhalten sich gleich?

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

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

Aber die Reihenfolge der zurückgegebenen Listen sind in diesen beiden Fällen nicht identisch.

Die erste Zeile mit Hibernate sortiert ist, wird die zweite Zeile mit NameComparator

aaa3, aaa4, bbb5, BBB7, bbb8, BBB8 sortiert

aaa3, BBB7, BBB8, aaa4, bbb5, bbb8

Was ist der Grund dafür?

+0

Die Datenbank verwendet wahrscheinlich eine bestimmte Sortierfolge zum Sortieren (wobei beispielsweise die Reihenfolge [a, E, i, é, A] [A, a, E, é, i] wäre), während Ihr reiner lexikographischer Komparator dies wäre sortiere sie als [A, E, a, i, é]. –

+0

Bitte füge ein einfaches Beispiel mit zwei sortierten Listen hinzu. –

+0

@JBNizet Ja, das muss der Grund sein. –

Antwort

2

Wenn Sie Order.asc(studentName) verwenden, werden Ihre Daten in der Datenbank sortiert. Die NameComparator sortiert jedoch die Daten in Ihrer Java-Anwendung. Diese beiden Systeme verwenden wahrscheinlich nicht die gleiche Sortierung für Strings.

Die meisten Datenbanken verwenden eine Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung, während Java compareTo Groß- und Kleinschreibung unterscheidet. Darüber hinaus verfügen die meisten Datenbanken über ausgeklügelte Sortiermechanismen für Akzente (der Buchstabe wird beim Sortieren in der Nähe des Buchstabens "a" stehen), Leerzeichen, Bindestriche, Ziffern usw., die sich erheblich von der Standardsortierung von Java unterscheiden. Schließlich wirken sich Sprach- und Regionseinstellungen auf die Sortierreihenfolge aus.

Obwohl die Sortierung in der Datenbank konfiguriert und in Java anders implementiert werden kann, ist es schwierig, ein übereinstimmendes Verhalten zu erzielen. Sie sind besser dran, entweder alles in der Datenbank oder alles in Java zu sortieren. Die erstgenannte Option ist für große Datenmengen vorzuziehen.

+0

Verstehen Sie die Situation und danke für den Rat. –

Verwandte Themen