Abfragesyntax für EJB Mediator
Wenn Sie damit beginnen, Ihre Anwendungen so zu schreiben, dass Sie von dem im Produkt bereitgestellten Enterprise JavaBeans (EJB) Data Mediator Service (DMS) profitieren können, sollten Sie die folgenden Punkte beachten.
- Für den EJB-DMS kann als Eingabeargument eine zusammengesetzte EJB-Abfrage angegeben werden, die sich aus einem Array mit EJB-QL-Anweisungen (Query Language) und einem optionalen XREL-Befehl zusammensetzt. Der XREL-Befehl ist eine Liste von EJB-Beziehungen und muss der letzte Eintrag im Array sein.
- Jede EJB-QL-Abfrage gibt Daten in Form einer SDO-Instanz (Service DataObjects) zurück. Alle SDO-Instanzen werden in einen DataGraph eingefügt. Die SELECT-Klausel jeder Abfrage gibt die CMP-Felder oder Ausdrücke an, die im SDO zurückgegeben werden sollen. Die WHERE-Klausel gibt die Filterbedingungen an. Es kann auch eine ORDER-BY-Klausel definiert werden. Wenn zwei oder mehr SELECT-Klauseln denselben SDO-Typ zurückgeben, muss jede SELECT-Klausel dieselben CMP-Felder und Ausdrücke bereitstellen. Aus Gründen der Aktualisierbarkeit müssen die Primärschlüsselfelder der EJB bereitgestellt werden. JOINs, UNIONs und Aggregation werden nur in Unterabfragen unterstützt.
- Eine Abfrage im Array kann auf eine vorherige Abfrage in der FROM-Klausel verweisen. Hierzu müssen die Identifikationsvariable, die in der vorherigen Abfrage definiert wurde, und ein Beziehungsname verwendet werden. Diese Beziehung kann einen oder mehrere Werte haben.
- Beziehungen werden zwischen Datenobjektinstanzen im Graphen hergestellt, wenn eine Beziehung in der FROM-Klausel oder im XREL-Befehl verwendet wird.
- Eingabeargumente mit mehreren Werten werden in FROM-Klauseln unterstützt.
Wenn ?1 auf eine Sammlung von Dept-EJBs verweist, ist die folgende Abfrage für den Mediator gültig.
Es muss eine Umsetzungssyntax verwendet werden, die dem Abfragecompiler den Elementtyp der Sammlung übermittelt.
select d.deptno from (Dept) ?1 as d
- Die Sammlung ist als Eingabeargument hilfreich, wenn aus EJB-Instanzen, die im EJB-Container oder im Datencache des Persistenzmanagers zwischengespeichert sind, ein DataGraph erstellt werden soll.
- Die SELECT-Klausel kann eine Liste der abzurufenden CMP-Felder oder gültige Ausdrücke in EJB-Abfragesprache angeben.
(Für den Abruf aller CMP-Felder kann die Platzhalterschreibweise
* verwendet werden.) Die CMP-Felder und Ausdrücke müssen Felder oder Abfragen der folgenden Typen sein:
- Primitive-Typen: Boolean, Byte, Short, Integer, Long, Float, Double, Char
- Objekt-Wrapper-Typen für die Primitive-Typen
- Java™.lang.String
- Java.math.BigDecimal
- java.math.BigInteger
- byte [ ]
- Java.sql.Date
- java.sql.Time
- java.sql.Timestamp
- java.util.Date
- java.util.Calendar
- Alle CMP-Felder mit Primärschlüsseln müssen abgerufen werden, da die SDOs (Service Data Objects) sonst nicht aktualisiert werden können und applyChanges eine Ausnahme auslöst.
- SDO-Attribute aus Ausdrücken in EJB-Abfragesprache, z. B. e.salary + e.bonus AS TOTAL_PAY, können nicht aktualisiert werden. Falls Sie ein Update versuchen, verursacht applyChanges eine QueryException.
- Datenverbundsausdrücke wie SUM(e.salary) sind nicht zulässig, auch wenn Sie Teil der EJB-Abfragesprache sind. Datenverbundsausdrücke können in der WHERE-Klausel in einer Unterauswahl verwendet werden.