如何在order by子句中指定运算符?

时间:2012-08-06 09:13:35

标签: java mysql hibernate jpa jpa-2.0

我有以下查询(使用jpa 2.0):

String query = "
SELECT p.id, p.name 
FROM package p
ORDER BY (p.id = :idPackage) DESC, (p.mPrice+p.vPrice) DESC 
LIMIT 10 ";

query.setParameter("idPackage", idPackage);
query.getResultList();

其中package具有以下属性:

Package
 - id
 - name
 - mPrice
 - vPrice
 - duration

在JPA查询中,当我尝试执行它时,它会在ORDER BY子句中抱怨“=”运算符。有没有办法解决它?

这是我得到的例外:

org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node:

2 个答案:

答案 0 :(得分:1)

您不能在order by子句中使用带有JPA查询的'='。如果您确实需要,可以使用createNativeQuery代替createQuery

答案 1 :(得分:0)

您需要使用=作为比较运算符:

SELECT p.id, p.name 
FROM package p
ORDER BY (p.id = idPackage) DESC, (p.mPrice+p.vPrice) DESC 
LIMIT 10;

编辑:尝试:

String query = "
SELECT p.id, p.name 
FROM package p
ORDER BY (p.id = idPackage) DESC, (p.mPrice+p.vPrice) DESC 
LIMIT 10 ";