Преобразование Oracle SQL Query в JPQL Query - PullRequest
2 голосов
/ 20 января 2011

У меня проблема при создании запроса JPQL, который получен из собственного запроса Oracle SQL. Некоторые люди говорили мне использовать собственный запрос, но я хочу использовать способность к постоянству. Вот собственный SQL-оператор Oracle:

SELECT a.taxnumber, b.compid, b.compnum, 
(case 
    when b.score > 80 then 'LOW RISK' 
    when b.score between 65 and 80 then 'MEDIUM RISK'
    when b.score > 65 then 'HIGH RISK' 
    else null end) status 
FROM registers a, company b

Кто-нибудь знает, как преобразовать его в JPQL-запрос? Что меня смущает, так это утверждение case when ...

Ответы [ 2 ]

1 голос
/ 20 января 2011

Какая у вас объектная модель?

Вы можете просто определить класс компании, сопоставив ее с таблицей компании.Вместо того, чтобы делать случай, если SQL, просто сопоставьте столбец оценки либо с помощью @Convert в EclipseLink, либо просто отобразите его напрямую и используйте методы в вашей объектной модели, называемые getRisk (), которые возвращают Enum, основанный на значении.(то есть, но логика в вашей объектной модели, а не в SQL).

Вы можете использовать собственный запрос SQL в JPA, если вы действительно хотите, или даже использовать функцию CASE в JPQL, но поместив логику вВаша объектная модель будет лучшим дизайном.

0 голосов
/ 14 февраля 2013

В JPA 2.0 вы можете использовать "CASE WHEN"

http://en.wikibooks.org/wiki/Java_Persistence/JPQL_BNF#New_in_JPA_2.0

Иначе, вы можете определить метод в сущности следующим образом:

public String getRiskByScore(){
   String risk = null;
   if(this.score > 80) risk = "LOW RISK";
   else if ....
   return risk;
}

JPQL-запрос:

SELECT a.taxnumber, b.compid, b.compnum, b.score 
FROM registers a, company b

Тогда вы бы позвонили getRiskByScore()

...