Hallo zusammen,
ich benutze den CriteriaBuilder für eine Abfrage und habe dort die Einträge
Die Transaction Klasse hat entsprechend Orders (root.get("order")), die aber nicht notwendigerweise gesetzt sind, also auch NULL sein können.
Die Abfrage gibt mir nun leider nur die Ergebnisse zurück, bei denen die Order nicht NULL ist (hier klappt alles super), die Ergebnisse mit Order = NULL ignoriert er. Wenn ich die Funktionen, die root.get("order") enthalten weglasse, kriege ich alle zurück (mit und ohne NULL Orders).
Ich habe jetzt schon versucht, den multiselect umzubauen in
um die NULL Werte mit einzubeziehen, hat aber auch nichts gebracht.
Kann mir jemand helfen und sagen, wie ich die Abfrage bauen kann, dass sie auch die Zeilen zurück gibt, bei denen Order NULL ist?
Beste Grüße und Danke schon mal,
Forfaro
ich benutze den CriteriaBuilder für eine Abfrage und habe dort die Einträge
Java:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Object> query = cb.createQuery();
Root<Transaction> root = query.from(Transaction.class);
// ......
query.multiselect(root,
cb.max(root.<Number>get("executionDate")), // 1
cb.count(root), // 2
cb.avg(root.get("order").<Double>get("executedPrice")), // 3
cb.sum(root.get("order").<Double>get("executedAmount")), // 4
cb.sum(root.<Double>get("quantity")), // 5
cb.avg(root.<Double>get("exchangeRate")), // 6
cb.sum(root.get("order").<Double>get("transactionCosts"))
);
Die Transaction Klasse hat entsprechend Orders (root.get("order")), die aber nicht notwendigerweise gesetzt sind, also auch NULL sein können.
Die Abfrage gibt mir nun leider nur die Ergebnisse zurück, bei denen die Order nicht NULL ist (hier klappt alles super), die Ergebnisse mit Order = NULL ignoriert er. Wenn ich die Funktionen, die root.get("order") enthalten weglasse, kriege ich alle zurück (mit und ohne NULL Orders).
Ich habe jetzt schon versucht, den multiselect umzubauen in
Java:
query.multiselect(root,
cb.max(root.<Number>get("executionDate")), // 1
cb.count(root), // 2
cb.avg(cb.<Double>selectCase().when(root.get("order").isNull(), 0.0).otherwise(root.get("order").<Double>get("executedPrice"))),
cb.sum(cb.<Double>selectCase().when(root.get("order").isNull(), 0.0).otherwise(root.get("order").<Double>get("executedAmount"))),
cb.sum(root.<Double>get("quantity")), // 5
cb.avg(root.<Double>get("exchangeRate")), // 6
cb.sum(cb.<Double>selectCase().when(root.get("order").isNull(), 0.0).otherwise(root.get("order").<Double>get("transactionCosts")))
);
um die NULL Werte mit einzubeziehen, hat aber auch nichts gebracht.
Kann mir jemand helfen und sagen, wie ich die Abfrage bauen kann, dass sie auch die Zeilen zurück gibt, bei denen Order NULL ist?
Beste Grüße und Danke schon mal,
Forfaro