Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

...

rstellen einer Datenbankabfrage (Query)

MethodeBeispiel
create

Mit Hilfe dieser Methode kann ein typisiertes Query-Object angelegt werden, mit dessen Hilfe Datenbankabfragen ausgeführt werden können. Dabei wird auf eine abstrakte Query-Language zurückgegriffen. Abfragen mit SQL-Syntax sind nicht möglich.

Codeblock
boolean sortAscending = true;

Query<Auftrag> queryAuftrag = QueryProvider.create(Auftrag.class);

queryAuftrag.where(Auftrag.Auftragsnr.notNull())
            .and(Auftrag.Bestellwert.Gt(BigDecimal.ZERO))
            .orderBy(Auftrag.Auftragsnr, sortAscending);

Folgende Bedingungen können verwendet werden:

  • eq(value): gleich
  • isNull(): ist ein Nullwert
  • neq(value): ungleich
  • notNull(): kein Nullwert

Und für Numerische Attribute:

  • Gt(value): größer als
  • Gte(value): Größer als oder gleich
  • Lt(value): kleiner als
  • Lte(value): kleiner als oder gleich

Weitere Informationen finden sich in folgenden Klassen (unter api.nuclos.de):

org.nuclos.api.businessobject.attribute.Attribute<T>
org.nuclos.api.businessobject.attribute.NumericAttribute<T>
execute

Diese Funktion führt eine Query aus und gibt eine typisierte Liste als Ergebnis zurück.

Codeblock
List<Auftrag> results = QueryProvider.execute(queryAuftrag);
for (Auftrag a :results) {
	BigDecimal bestellwert = a.getBestellwert();
}

...

MethodeBeschreibung
exist

Mit Hilfe der exist-Methode kann eine Subquery in eine äußere Query eingebunden werden. Die Verknüpfung von Query und Subquery findet ausschließlich über (Fremd)schlüssel statt.

Hier ein Beispiel:

Ziel der Abfrage ist die Ermittlung einer Liste von Bestellungen, die sich entweder im Status "neu" oder im Status "angelegt" befinden. Alle anderen Status sollen nicht weiter berücksichtigt werdenfür die Kunden mit vollständigen Zahlungsbedingungen hinterlegt sind:

 

Codeblock
// Status "neu" und "angelegt" kleiner gleich halbjährlich
Query<nuclosstate> qryStatusAlle Kunden, fuer die Zahlungsbedingungen hinterlegt wurden
Query<Kunde> qryKunden = QueryProvider.create(nuclosstateKunde.class);
qryStatusqryKunden.where(nuclosstateKunde.Id.eq(BestellungSM.State_10.getId()Zahlungsbedingung.notNull());

// Nun brauchen wir alle Bestellungen dieser Kunden        
Query<Bestellung> queryBestellungen = QueryProvider.create(Bestellung.class);
queryBestellungen.where(Bestellung.Bestellnr.notNull())
                 .exist(qryStatusqryKunden, Bestellung.NuclosStateKunde)
                 .orderBy(Bestellung.Bestellnr, true);
List<Bestellung> results = QueryProvider.execute(querySubqueryBestellungen);

 

Zu beachten ist, dass die Subquery selbst nicht vom QueryProvider ausgeführt werden muss. Sie wird in ihrer fertigen "Struktur" der äußeren Query übergeben.

...