Wie kann ich mit typcasting innerhalb einer JPQL-statement?
Habe ich zwei Integer
Spalten in der Datenbank (derby und db2). Ich brauche Sie zu teilen mit jedem anderen in einem JPQL
.
Beide Spalten Typ Integer
null zurückgeben, wenn Rest ist eine dezimale Zahl e ist.g 0.25
wird 0
etc und verständlicherweise so, da Typ int.
In SQL
ich hätte diese zum Beispiel
select CAST(column1 as decimal(6,2))/CAST(column2 as decimal(6,2))from Sometable;
aber was ist JPQL
entspricht .
Eine Möglichkeit wäre (habe ich noch nicht ausprobiert) ist, um eine @Transient
- Methode in der entity Rücksendung der Decimal-Typ, und tun dies Berechnung und pass auf JPQL
aber ich hätte es lieber lassen SQL
diese Arbeit zu tun.
Mysql nicht erforderlich casting auf der Datenbank-Ebene . So Verhalten sich für verschiedene RDBMS ist anders und das ist gut . Aber was soll JPQL tun mit heraus benötigen, um eine native Abfrage, um zu wissen, dass cast zu dezimal ist für diesen Vorgang erforderlich.
Hinzufügen Dialekt <property name="openjpa.jdbc.DBDictionary" value="derby"/>
nicht fix it entweder.
Bitte beachten Sie, es ist JPA1
InformationsquelleAutor Shahzeb | 2012-05-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie grundsätzlich drei Optionen.
zu nennen Konstruktor und innen, die Anrufe, die Sie verwalten können, die
Datentypen, die übergeben werden, in SQL, aber du wirst mehr bekommen, dann ein
Art der Objekte zurück, die in Ordnung ist nur das Rechte von rechts
array-index.Mehr auf dieser hier.
InformationsquelleAutor Java Ka Baby
Dass die division operator führt eine integer-division auf integer-Argumente ist ein feature. In MySQL müssen Sie explizit auswählen, dass
div
für ganzzahlige division und/
für Gleitkomma-division, in der Erwägung, dass in JPQL die Wahl erfolgt automatisch, genauso wie in Java.Also ich schlage vor:
BigDecimal
ist, was nicht, was erwartet wird (z.B.Double
). Allerdings fand ich eine tolle Lösung für dieses Problem hier: stackoverflow.com/questions/34786148/...InformationsquelleAutor Old Pro
AFAIK gibt es nicht eine Möglichkeit, das zu tun diese Art der Besetzung in JPQL.
Schlage ich vor, JPA nativen Ausführung der Abfrage können Sie eine SQL-Abfrage ausführen wie würden Sie, wenn Sie wurden mit Hilfe von JDBC.
Zum Beispiel:
oder
Können Sie bitte erläutern, warum Sie erwarten, dass Dialekt automatisch das Gießen?
da die division von zwei ganzen zahlen produzieren, die einen anderen Datentyp je nach zugrunde liegenden Datenbank. Zum Beispiel
Mysql
liefert einen Dezimalwert zurück, wo alsDerby
undDB2
Ganzzahl, die änderungen0.25
zu0
zum Beispiel . Es Vordergrund Dialekt muss wissen, das Verhalten und bieten einen Maschinismus insbesondere angesichts der Tatsache, dass die Möglichkeit, eine Besetzung ist nicht verfügbar in `JPQL'.InformationsquelleAutor idanmo