2012-05-12 10 views
13

Ich arbeite an Hibernate in Eclipse. Ich führe eine einfache 'Von'-Abfrage aus. Hier ist der CodeHibernate Query gibt den gleichen Datensatz mehrmals

List list = sess1.createQuery("From Myview").list(); 
    System.out.println("Records Found :"+list.size()); 

    Iterator<Myview> i = list.iterator(); 

    while(i.hasNext()) 
    { 
     Myview nS = i.next(); 
     System.out.println(nS.getFirstName()+" -- "+nS.getLastName()+" -- "+nS.getAddressLine1()); 
    } 

Das Problem der list.size ist() liefert 11, das Recht ist, wie ich 11 Datensätze in meinem Tisch. Aber wenn ich in While-Schleife bin, werden die gleichen Datensätze mehrmals angezeigt und die Schleife endet nach der 11. Iteration. hier ist meine Ausgabe

enter image description here

hier ist, was ich

enter image description here

Jetzt möchten, können Sie in meiner Ausgabe sehen, Rekord 11 Mal angezeigt, aber der gleiche Datensatz wird immer wieder wiederholt . Und was ich brauche, ist die Ausgabe, die im späteren Bild angezeigt wird.

Bitte helfen Sie mir in dieser Hinsicht, wie ich bin hier zu überwintern

Antwort

18

Dies passiert, wenn das ID-Element in Ihrer HBM-Datei keine PK in Ihrer DB-Tabelle ist. Hibernate behandelt alle Zeilen mit derselben ID wie das gleiche Objekt.

Ändern Sie entweder Ihr ID-Element, um auf eine PK-Spalte zu verweisen, oder verwenden Sie das Composite-ID-Element, falls Ihre Tabelle nur einen zusammengesetzten Primärschlüssel enthält.

0

Sind Sie sicher, dass die Tabelle richtig gefüllt ist? Versuch:

List list = sess1.createQuery("SELECT * FROM Myview").list(); 

futhermore, werden Sie diese Liste aus einer Sicht zu bekommen? Sind Sie sicher, dass Sie diese Ansicht richtig gemacht haben?

+3

Dies ist SQL, nicht HQL. –

0

Sie sollten das Schlüsselwort distinct verwenden, um dasselbe Ergebnis zu filtern.

1

Ihr Unternehmen Myview haben java.io.Serializable Schnittstelle

0

implementieren Wenn Sie Zuordnung in der Abbildung haben dann, wenn fetch=FetchType.EAGER überprüfen. Wenn ja, verwenden Sie einen anderen Fetch-Typ oder fetchMode.

0

Versetzen Sie die von Hibernate zurückgegebenen Objekte in ein LinkedHashSet und geben Sie das LinkedHashSet zurück.

Verwandte Themen