JPA: TypedQuery gibt manchmal null anstelle von NoResultException zurück

7

Normalerweise arbeite ich mit NoResultException, um ein "leeres" Objekt, z. eine leere Fehlerliste oder einen neuen BigInteger ("0"), wenn ich von einer TypedQuery keine Ergebnisse erhalte. Jetzt stellte sich heraus, dass das manchmal nicht funktioniert. Plötzlich gibt getSingleResult () null zurück, anstatt eine NoResultException zu verursachen, und ich verstehe nicht warum. Schau dir dieses Beispiel an:

%Vor%

Der wichtige Teil der Entität ...

%Vor%

Wenn ich eine accountId verwende, die keine Ergebnisse verursacht, bekomme ich null statt NoResultException. Irgendwelche Ideen, warum das so ist? Selbst Javadoc von TypedQuery sagt, dass es NoResultException zurückgeben muss:

%Vor%     
Bevor 24.04.2012, 09:39
quelle

1 Antwort

19

Es sieht nach einem korrekten Verhalten für mich aus.

NoResultException wird ausgelöst, wenn keine Zeilen zurückgegeben werden, aber sum gibt in Ihrem Fall genau eine Zeile mit null -Wert zurück. Von JPA 2.0 Spezifikation:

  

Wenn SUMME, AVG, MAX oder MIN verwendet werden und es keine Werte gibt, für die die Aggregatfunktion verwendet werden kann   angewendet, ist das Ergebnis der Aggregatfunktion NULL.

Wenn Sie 0 anstelle von null erhalten möchten, verwenden Sie coalesce :

%Vor%     
axtavt 24.04.2012, 11:26
quelle

Tags und Links