Announcement

Collapse
No announcement yet.

hibernate hql vs. criteria (unterschiedliche Ergebnisse)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • hibernate hql vs. criteria (unterschiedliche Ergebnisse)

    Hallo,

    ich beobachte hier ein sehr komisches Verhalten von hibernate.

    List<Hardwareversion> list1 = (List<Hardwareversion>) session.createQuery("from Hardwareversion hwv").list();

    List<Hardwareversion> list2 = (List<Hardwareversion>) session.createCriteria(Hardwareversion.class).list ();
    werden in der selben Session und in der selben Transaktion durchgeführt.

    list1 enthält zwei verschiedene Instanzen mit unterschiedlichen Attributwerten entspricht dem Datenbankinhalt (2 Zeilen)... also ok.
    list2 hingegen enthält drei Einträge (siehe Bild) die Objektinstanzen sind die selben wie bei list1 allerdings ist eine Objektinstanz doppelt in list2 vorhanden.

    Wie ist das möglich?
    Ist das korrekt das ich bei einer Abfrage zwei identische Objektinstanzen als antwort zurück bekomme?
    Wie muss ich mein createCriteria() ändern damit ich die selbe Ergebnismenge bekomme wie bei hql-Statement?

    Hat jemand eine Idee, oder was ähnliches erlebt?

    Danke
    Attached Files

  • #2
    Konnte das bisher nicht nachvollziehen (jedenfalls nicht bei einfachen Abfragen).

    Korrekt ist das sicherlich nicht, aber dann die HSQL nutzen oder die Liste vor der "Benutzung" auf doppelte Werte prüfen und diese löschen
    Zuletzt editiert von Christian Marquardt; 29.04.2009, 13:33. Reason: Rechtschreibung
    Christian

    Comment


    • #3
      Warum er das genau in diesem Fall bei Dir macht weiß ich nicht. Aber so ungewöhnlich ist dieses "Phänomen" nicht. Es ist nicht garantiert, das die Listen nur eindeutige Ergebnisse enthalten, wenn Du nicht "select distinct" machst (im Falle von Criterias criteria.setResultTransformer(Criteria.DISTINCT_RO OT_ENTITY);). Eine Alternative zum distinct wäre es, die Listen danach gleich an ein Set zu übergeben. Dann verschwinden natürlich auch doppelte Referenzen.

      Comment


      • #4
        Criteria.DISTINCT_RO OT_ENTITY hat funktioniert.
        Hätte ich eigentlich auch selber drauf kommen können.
        Wenn ich in SQL keine doppelten Werte bekommen will nehme ich ja auch "distinct"

        Vielen Dank
        Markus

        Comment

        Working...
        X