Wie erstellen Sie Konstanten numerischen Wert Ausdruck in QueryDSL?
Ich würde gerne Abfrage erstellen, wie dies mit QueryDSL
update WorkMessage w set w.totalPrice = 0.12 - w.totalCost;
Ich habe versucht, wie diese
Expression<Float> priceExpr = Expressions.constant(0.12f);
new JPAUpdateClause(em, w)
.set(w.totalPrice , priceExpr.subtract(w.totalCost));
Aber das funktioniert nicht - Ausdruck nicht subtrahieren Methode.
Habe ich es wie folgt:
new JPAUpdateClause(em, w)
.set(w.totalPrice , w.totalCost.subtract(0.12f).negate());
aber ich würde gerne wissen, wie zu tun es der erste Weg.
//EDit
Der zweite Weg funktioniert nicht:
JPAUpdateClause.toString sagt:
update WorkMessage workMessage
set workMessage.totalPrice = -(workMessage.totalCost - :a1)
aber das SQL-Ergebnis
update work_message set total_price=-total_cost-?
Klammern einfach verschwunden. Mache ich etwas falsch? Es sieht aus wie diese:
w.totalCost.subtract(0.12f).negate()
w.totalCost.negate().subtract(0.12f)
haben das gleiche Ergebnis.
Für das obige problem
w.totalCost.negate().add(0.12f)
funktioniert. Aber ich denke, es ist ein bug.
- Konnte Sie öffnen Sie ein ticket auf GitHub : github.com/mysema/querydsl/issues
- QueryDSL funktioniert OK. Es ist ein Hibernate-bug. update WorkMessage workMessage set workMessage.earnedPrice = - ( workMessage.totalCost - :a1 ) übersetzt in update work_message set earned_price=-total_cost-?
- Sorry, habe ich falsch verstanden
- Ich dachte, es war etwas mit QueryDSL, aber es ist mit Hibernate selbst. Erstellt ein Problem hibernate.onjira.com/browse/HHH-6714 . Danke für die Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entfernten wir die DSL-Konstante Typen, der vor einiger Zeit von Querydsl. Wenn Sie wirklich wollen, es zu schreiben, der erste Weg, dann muss man es so Ausdrücken :
oder
wenn Sie eine NumberExpression
Ich hatte das gleiche problem vor einiger Zeit (brauchte die Konstante 0) und baute meine eigene ConstantNumberExpression Klasse. Es stellte sich heraus erstaunlich einfach 🙂
Ein Kollege hatte gerade das gleiche problem, für die Konstante 1, also habe ich beschlossen es hier zu posten.
Dies natürlich getan werden könnte, ein bisschen mehr generisch mit einem Typ-parameter, aber wir brauchten es nur für Integer (eigentlich nur für null und eins).