Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 5 Nächste Version anzeigen »

Erstellen 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.

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.

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

Erstellen einer Unterabfrage

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 werden:

 

// Status "neu" und "angelegt" kleiner gleich halbjährlich
Query<nuclosstate> qryStatus = QueryProvider.create(nuclosstate.class);
qryStatus.where(nuclosstate.Id.eq(BestellungSM.State_10.getId()));
        
Query<Bestellung> queryBestellungen = QueryProvider.create(Bestellung.class);
queryBestellungen.where(Bestellung.Bestellnr.notNull())
                 .exist(qryStatus, Bestellung.NuclosState)
                 .orderBy(Bestellung.Bestellnr, true);
List<Bestellung> results = QueryProvider.execute(querySub);

 

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.

 

Auslesen eines einzelnen Eintrages

MethodeBeispiel
getById

Mit Hilfe dieser Methode kann ein einzelnes BusinessObject anhand des Typs und der Id ausgelesen werden.

// die Variable 'auftrag' stellt ein BusinessObject des Typs 'Auftrag' dar und besitzt eine Referenz auf ein Kundenobjekt
Kunde k = QueryProvider.getById(Kunde.class, auftrag.getKundeId());
  • Keine Stichwörter