Nullwertsemantik
Im folgenden Abschnitt wird die Semantik von Nullwerten beschrieben.
- Vergleichs- oder Rechenoperationen mit einem unbekannten Wert (Nullwert) ergeben einen unbekannten Wert
- In einer J2EE-Anwendung der Version 1.3 wird in einem Pfadausdruck eine äußere Verknüpfung verwendet, wenn ein NULL-Feld oder cmr-Wert NULL ergibt. In J2EE Version 1.4 wird im Pfadausdruck eine innere Verknüpfung verwendet.
- Die Operatoren IS NULL und IS NOT NULL können auf Pfadausdrücke angewandt werden und geben die Werte TRUE (Wahr) oder FALSE (Falsch) zurück. Die Booleschen Operatoren AND, OR und NOT verwenden dreiwertige Logik: True, False und Unknown (Unbekannt).
AND | True | False | Unbekannt |
---|---|---|---|
True | True | False | Unbekannt |
False | False | False | False |
Unbekannt | Unbekannt | False | Unbekannt |
OR | True | False | Unbekannt |
---|---|---|---|
True | True | True | True |
False | True | False | Unbekannt |
Unbekannt | True | Unbekannt | Unbekannt |
NOT | |
---|---|
True | False |
False | True |
Unbekannt | Unbekannt |
Beispiel: Nullwertsemantik
select object(e) from EmpBean where e.salary > 10 and e.dept.budget > 100
Wenn "salary" (Gehalt) gleich NULL ist, ergibt die Auswertung von e.salary > 10 den Wert "unknown" (unbekannt), und es wird kein Mitarbeiterobjekt (employee) zurückgegeben. Wenn das cmr-Feld "dept" oder "budget" gleich NULL ist, ergibt die Auswertung von e.dept.budget > 100 den Wert "unknown", und es wird kein Mitarbeiterobjekt (employee) zurückgegeben.
select object(e) from EmpBean where e.dept.budget is null
Wenn in J2EE 1.3 dept oder budget gleich NULL ist, gibt die Auswertung von e.dept.budget TRUE und ein Mitarbeiterobjekt (employee) zurück. In J2EE 1.4 wird das Mitarbeiterobjekt (employee) nur zurückgegeben, wenn budget gleich NULL ist.
select object(e) from EmpBean e , in (e.dept.emps) e1 where e1.salary > 10
Wenn dept gleich NULL ist, ergibt der mehrwertige Pfadausdruck e.dept.emps eine leere Objektgruppe (und keine Objektgruppe, die einen NULL-Wert enthält). Es wird kein Mitarbeiterobjekt (employee) mit dem dept-Wert null zurückgegeben.
select object(e) from EmpBean e where e.dept.emps is empty
Wenn dept gleich NULL ist, ergibt die Auswertung des Prädikats den Wert unknown, und es wird kein Mitarbeiterobjekt (employee) zurückgegeben.
select object(e) from EmpBean e , EmpBean e1 where e member of e1.dept.emps
Wenn dept gleich NULL ist, gibt die Auswertung des Members des Prädikats unknown zurück, und es wird kein Mitarbeiterobjekt (employee) zurückgegeben.