创建从本机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
陈述......
答案 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()