iBatis füllt kein Objekt, wenn keine Zeilen gefunden werden

8

Ich führe eine gespeicherte Prozedur aus, die 2 Cursor zurückgibt und keine von ihnen irgendwelche Daten hat. Ich habe die folgende Zuordnung xml:

%Vor%

Die erste Ergebnismenge wird in eine HashMap geschrieben ... die zweite Ergebnismenge wird in eine MyBean -Klasse geschrieben.

Code in meinem DAO folgt:

%Vor%

in der letzten Zeile oben..mein Code schlägt fehl. Es schlägt fehl, weil der zweite Cursor keine Zeilen hat und deshalb nichts in die Liste eingetragen wird. Der erste Cursor gibt jedoch auch nichts zurück, aber da die Ergebnisse in ein HashMap geschrieben werden, enthält die Liste für den ersten Cursor mindestens HashMap object.

Warum dieser Unterschied? Gibt es eine Möglichkeit, iBatis ein Objekt von MyBean in die Liste zu setzen, selbst wenn keine Zeilen zurückgegeben werden? Oder sollte ich das in meiner DAO behandeln? Ich möchte vermeiden, es in der DAO zu handhaben, weil ich eine ganze Menge DAO's habe.

    
Omnipresent 10.11.2009, 19:23
quelle

2 Antworten

1

Ibatis instanziiert oder gibt keine Objekte zurück, wenn das Resultset leer ist (oder in Ihrem Fall, wenn der dritte Parameter Ihrer gespeicherten Prozedur null zurückgibt).

Ich habe beim Schreiben von typeHandlers bemerkt, dass sie nicht einmal aufgerufen werden, wenn kein Ergebnis zurückgegeben wird, so dass die Route auch nicht hilft.

Ich bin sicher, dass Sie in diesem Fall gute Gründe haben, leere Objekte zu instanziieren, aber ich fürchte, der einzige Weg besteht darin, Nullen in Ihrem DAO zu erkennen.

Wenn Sie viele DAOs mit diesem Problem haben, könnten Sie eine Superklasse erweitern und eine bequeme Methode verwenden, die nach einer leeren Liste oder einem Null-Objekt sucht und in diesem Fall ein leeres Objekt zurückgibt.

    
Rolf 01.07.2011 18:17
quelle
0

Eigentlich glaube ich Result1 Verhalten ist das richtige (keine Ergebnisse sollten immer zu einer leeren Liste führen).

Nachdem Sie überprüft haben, dass Result0 wirklich ein leerer Cursor ist (im Gegensatz zu zB einem Cursor mit einer Zeile mit allen Feldern und Null), können Sie nach einem Bug suchen in iBatis:)

Was Ihre zweite Frage anbelangt, glaube ich nicht, dass iBatis Ihnen helfen kann (oder sollte: Solch ein Fehler ist nicht Teil der Anwendungsschnittstelle der Datenbank und sollte daher am besten in der DAO behandelt werden - oder vielleicht sogar noch weiter oben) Ihre Service-Hierarchie).

    
giorgiga 17.06.2011 09:55
quelle

Tags und Links