Erstellen einer Datenbankabfrage (Query)
Methode | Beispiel |
---|---|
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:
Und für Numerische Attribute:
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
Methode | Beschreibung |
---|---|
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, für die Kunden mit vollständigen Zahlungsbedingungen hinterlegt sind:
// Alle Kunden, fuer die Zahlungsbedingungen hinterlegt wurden Query<Kunde> qryKunden = QueryProvider.create(Kunde.class); qryKunden.where(Kunde.Zahlungsbedingung.notNull()); // Nun brauchen wir alle Bestellungen dieser Kunden Query<Bestellung> queryBestellungen = QueryProvider.create(Bestellung.class); queryBestellungen.where(Bestellung.Bestellnr.notNull()) .exist(qryKunden, Bestellung.Kunde) .orderBy(Bestellung.Bestellnr, true); List<Bestellung> results = QueryProvider.execute(queryBestellungen);
Soll nicht der PrimaryKey als Referenzfeld der Subquery verwendet werden, sondern ein anderer ForeignKey, muss dieser mit angegeben werden: Auftrag a = context.getBusinessObject(Auftrag.class); // Subquery zur Ermittlung der Produktgruppe, die im Auftrag angegeben wurden Query queryPg = QueryProvider.getById(Produktgruppe.class, a.getProduktgruppeId()); // Hauptabfrage des Bestands aller Produkte, die in der Produktgruppe hinterlegt wurden Query queryBestand = QueryProvider.create(Bestand.class); queryBestand.exist(queryPg, Bestand.Produkt, Produktgruppe.Produkt); // Produktgruppe.Produkt ist Fremdschlüssel in Produktgruppe List<Bestand> lstResults = QueryProvider.execute(queryBestand); for (Bestand b : lstResults) { // ... }
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
Methode | Beispiel |
---|---|
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()); |