将Oracle SQL查询转换为JPQL查询

时间:2011-01-20 02:16:37

标签: jpa eclipselink jpql

创建从本机Oracle SQL查询派生的JPQL查询时遇到问题。有些人告诉我使用本机查询,但我想利用持久性的能力。以下是本机Oracle SQL语句:

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 个答案:

答案 0 :(得分:1)

你的对象模型是什么?

您可以将公司类定义为公司表的映射。如果不是SQL,只需使用EclipseLink中的@Convert映射得分列,或者直接映射它,并在对象模型中使用名为getRisk()的方法,该方法返回基于值的Enum。 (即你的对象模型中的逻辑,而不是SQL中的逻辑)。

如果您真的想要,甚至可以在JPQL中使用CASE函数,可以在JPA中使用本机SQL查询,但将逻辑放在对象模型中将是最好的设计。

答案 1 :(得分:0)

在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()