Tôi có hai cột Integer
trong cơ sở dữ liệu (derby và db2). Tôi cần chia chúng với nhau trong một số JPQL
.Làm thế nào tôi có thể sử dụng typcasting bên trong một tuyên bố JPQL?
Cả hai cột thuộc loại Integer
trả về số không nếu số còn lại là số thập phân, ví dụ: 0.25
trở thành 0
v.v ... và vì vậy, vì loại là int.
Trong SQL
tôi có thể có điều này ví dụ
select CAST(column1 as decimal(6,2))/CAST(column2 as decimal(6,2))from Sometable;
nhưng JPQL
tương đương là gì.
Một lựa chọn có thể là (Tôi đã không cố gắng chưa) là phải có một phương pháp @Transient
trong thực thể trở về kiểu Decimal và làm tính toán này có và thông qua đó để JPQL
nhưng tôi thà để cho SQL
làm công việc này.
Mysql không yêu cầu truyền ở cấp cơ sở dữ liệu. Vì vậy, hành vi cho RDBMS khác nhau là khác nhau mà là tốt. Nhưng những gì nên làm với JPQL ra ngoài cần phải sử dụng một truy vấn gốc để biết rằng đúc để thập phân là cần thiết cho hoạt động này.
Thêm phương ngữ <property name="openjpa.jdbc.DBDictionary" value="derby"/>
cũng không khắc phục được.
Xin lưu ý đó là JPA1
Tôi có thể mong đợi div/toán tử trả lại số thập phân mà không cần một dàn diễn viên nhưng điều đó không xảy ra. Ngoài ra, việc thiết lập phương ngữ/nên đã thực hiện việc này cũng có thể không đúng. Tôi cũng đang hướng tới nativeQuery nhưng tôi vẫn không tin rằng nó không chỉ là lựa chọn. Nếu đó là loại thật buồn. +1. – Shahzeb
Bạn có thể vui lòng giải thích lý do tại sao bạn mong đợi phương ngữ tự động thực hiện việc truyền? – Victor
@Kaushik vì phân chia hai số nguyên tạo ra một kiểu dữ liệu khác nhau tùy thuộc vào cơ sở dữ liệu bên dưới. Ví dụ, 'Mysql' trả về một số thập phân với số nguyên' Derby' và 'DB2' thay đổi' 0,25' thành '0' chẳng hạn. Có phương ngữ fore phải biết hành vi và cung cấp một machinism đặc biệt là cho rằng tùy chọn của một diễn viên không có sẵn trong 'JPQL '. – Shahzeb