Versionen im Vergleich

Schlüssel

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

...

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, für die Kunden mit vollständigen Zahlungsbedingungen hinterlegt sind:

 

Codeblock
// 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 beim Aufruf der exist()-Methode mit angegeben werden:

Codeblock
Auftrag a = context.getBusinessObject(Auftrag.class);

// Subquery zur Ermittlung der Produktgruppe, die im Auftrag angegeben wurdenwurde
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.

...