Und wenn ja, unter welchen Umständen?
Javadoc- und JPA-Spezifikation sagt nichts.
Und wenn ja, unter welchen Umständen?
Javadoc- und JPA-Spezifikation sagt nichts.
Artur Ronald
Sie haben Recht. Die JPA-Spezifikation sagt nichts darüber aus. Aber Buch Java Persistence with Hibernate, 2. Auflagesagt:
Wenn das Abfrageergebnis leer ist, wird eine Null zurückgegeben
Die Hibernate-JPA-Implementierung (Entity Manager) gibt null zurück, wenn Sie query.getResultList() ohne Ergebnis aufrufen.
AKTUALISIEREN
Wie einige Benutzer darauf hingewiesen haben, scheint eine neueste Version von Hibernate stattdessen eine leere Liste zurückzugeben.
Auch in Eclipselink wird eine leere Liste zurückgegeben, wenn keine Ergebnisse gefunden werden.
Das ist sicherlich veraltet, Hibernate gibt eine leere Liste zurück.
– Michael Laffargue
17. Juni 2013 um 15:11 Uhr
Ich bekomme immer noch null von Hibernate 4.3.10 (läuft als JPA-Engine für Spring Data). Dies geschieht nur für eine einzelne native Abfrage, da typische JPA-Abfragen wie erwartet funktionieren.
– Jacek Prucia
25. Juni 2015 um 13:52 Uhr
Überprüfen Sie einfach beide Bedingungen mit OR. if(rows == null || rows.size == 0){}
wobei rows das ist, was getResultList() zurückgibt
– Nummer 945
22. Mai 2017 um 18:49 Uhr
Wickeln Sie es einfach in ein Optional.ofNullable() ein und Sie sind fertig.
– de.la.ru
22. September 2017 um 14:01 Uhr
Ich glaube zurück null
anstelle einer leeren Liste ist nicht das, was von der Spezifikation beabsichtigt ist, da es sonst ziemlich klar macht, wann zu erwarten ist null
an anderen Orten. Zumal die Dokumentation z getResultList
liest Execute a SELECT query and return the query results as a(n) (un)typed List. - @return a list of the results
. würde ich noch prüfen null
natürlich und gebe bei Bedarf selbst eine leere Liste zurück.
– Rene
29. Januar 2018 um 11:09 Uhr
Wenn die Spezifikationen sagten, dass es nicht passieren könnte, würden Sie ihnen glauben? Angesichts der Tatsache, dass Ihr Code möglicherweise mit vielen verschiedenen JPA-Implementierungen ausgeführt werden könnte, würden Sie jedem Implementierer vertrauen, dass er es richtig macht?
Egal was, ich würde defensiv codieren und auf null prüfen.
Nun die große Frage: Sollen wir “null” und eine leere Liste als synonym behandeln? Hier sollten uns die Spezifikationen helfen und tun es nicht.
Meine Vermutung ist, dass eine Nullrückgabe (falls dies tatsächlich passieren könnte) äquivalent zu “Ich habe die Abfrage nicht verstanden” und eine leere Liste “Ja, habe die Abfrage verstanden, aber es gab keine Datensätze” wäre.
Sie haben vielleicht einen Codepfad (wahrscheinlich eine Ausnahme), der sich mit nicht parsbaren Abfragen befasst. Ich würde dazu neigen, eine Nullrückgabe auf diesen Pfad zu leiten.
+1 Sie haben so recht, wenn Sie sagen: “Würden Sie jedem JPA-Anbieter vertrauen?” NEIN 🙂
– dfa
12. Juli 2009 um 8:03 Uhr
Bearbeitet, um hinzuzufügen: Arthur hat darauf hingewiesen, dass Hibernates JPA tatsächlich null zurückgibt, wenn keine Datensätze gefunden werden. In diesem Fall müssen wir also tatsächlich null und leere Liste zusammenfalten. Ich glaube, dass der Denkprozess, den wir oben durchgegangen sind, immer noch gültig ist. Es ist sogar denkbar, dass wir für verschiedene JPA-Stacks unterschiedliche Behandlungen von null haben sollten. Willkommen beim Portabilitätsspaß.
– DJNA
12. Juli 2009 um 8:06 Uhr
Einverstanden. Es gibt nur “Portabilitätsspaß”, weil die JPA-Spezifikation nicht das tut, was sie tun sollte … die genaue Semantik angeben. Schade, dass es von einem Komitee mit Eigeninteressen geführt wird.
– DataNucleus
13. Juli 2009 um 18:48 Uhr
“Ich habe die Abfrage nicht verstanden” sollte so behandelt werden Exception
Rückkehr null
wo Collection
Der Rückgabetyp ist ein offensichtlicher Konstruktionsfehler
– matoni
20. Juni 2019 um 20:30 Uhr
Im Gegensatz zu Arthurs Beitrag, als ich tatsächlich eine Abfrage durchführte, bei der keine Entitäten übereinstimmten, erhielt ich eine leere Liste, nicht null. Dies verwendet Hibernate und ist das, was ich für korrektes Verhalten halte: Eine leere Liste ist die richtige Antwort, wenn Sie nach einer Sammlung von Entitäten fragen und es keine gibt.
für OpenJPA bekomme ich auch eine leere Liste statt null.
– Gnavvy
25. Januar 2011 um 4:18 Uhr
Karl Follet
Wenn man sich das genau anschaut org.hibernate.loader.Loader
(4.1) sehen Sie, dass die Liste immer innerhalb der Methode processResultSet() initialisiert wird (Dok, Quelle).
protected List processResultSet(...) throws SQLException {
final List results = new ArrayList();
handleEmptyCollections( queryParameters.getCollectionKeys(), rs, session );
...
return results;
}
Ich glaube also nicht, dass es jetzt null zurückgeben wird.
Wenn Sie die Ergebnismenge mit CollectionUtils.isNotEmpty von Jakarta testen, sind Sie natürlich so oder so abgesichert.
Skomisa
Query.getResultList()
gibt stattdessen eine leere Liste zurück null
. Also prüfen isEmpty()
im zurückgegebenen Ergebnis und fahren Sie mit dem Rest der Logik fort, wenn es falsch ist.
wil der Kojote
Angesichts der Umsetzung von getResultsList()
in org.hibernate.ejb.QueryImpl
Klasse, es ist möglich, a zurückzugeben null
:
public List getResultList() {
try {
return query.list();
}
catch (QueryExecutionRequestException he) {
throw new IllegalStateException(he);
}
catch( TypeMismatchException e ) {
throw new IllegalArgumentException(e);
}
catch (HibernateException he) {
em.throwPersistenceException( he );
return null;
}
Meine Hibernate-Version ist: 3.3.1.GA
Genau diese Frage habe ich gesucht! tks! up 4 du!
– Rafa Ferreira
2. Juni 2010 um 14:54 Uhr