2017-12-06 3 views

Antwort

0

Sie können eine beliebige Klausel Ihrer Datenbank verwenden. Wenn Sie eine nicht standardmäßige Abfrage ausführen, verwenden Sie die Methode Model.findBySQL(...).

jedoch vor der Verwendung, lesen Sie dessen Dokumentation:

http://javalite.github.io/activejdbc/snapshot/org/javalite/activejdbc/Model.html#findBySQL-java.lang.String-java.lang.Object...-

Insbesondere folgt aus:

Stellen Sie sicher, dass die Abfrage alle Spalten zurückgibt mit diesem Modell verbunden sind, so dass die resultierenden Modelle Hydrat könnte selbst richtig. Zurückgegebene Spalten, die nicht Teil dieses Modells sind, werden ignoriert, können aber für die oben genannten Klauseln verwendet werden.

Mit anderen Worten, die von Ihnen ausgeführte Abfrage sollte mit der von diesem Modell zurückgegebenen Spalten übereinstimmen. Technisch gesehen kann sich Ihre Abfrage über mehrere Tabellen, Ansichten erstrecken und sogar benutzerdefinierte Funktionen ausführen. Das Resultset muss jedoch Spalten enthalten, die mit diesem Modell übereinstimmen. Warum das? Weil Ihr Modell im ORM "O" ist. Mit anderen Worten, es stellt einen einzelnen Datensatz aus einer Tabelle als Objekt dar.

Wenn Ihre Ergebnisse eine Mischung aus mehr als einem Modell oder einem Teilmodell oder irgendetwas dazwischen sind, verwenden Sie keine Modell-API. Verwendung Basis:

List<Map> results = Base.findAll("complex custom query"); 

http://javalite.github.io/activejdbc/snapshot/org/javalite/activejdbc/Base.html#findAll-java.lang.String-

Blick auf Variationen von find(...) und findAll(...) Methoden

+0

Igor, danke für die Antwort. Nach der Verwendung von 'Base.findAll()' muss ich dann jeden entsprechenden Spaltenwert erhalten (Beispiel für das erste Element in der Ergebnisliste): 'results.get (0) .get (" RESULT_SET_COLUMN_NAME ")'? – belgoros

+0

das ist richtig. Jede Karte entspricht einer Zeile aus Ihrem ResultSet. – ipolevoy