【问题标题】:how can i specify operator in order by clause?如何按子句顺序指定运算符?
【发布时间】:2012-08-06 09:13:35
【问题描述】:

我有以下查询(使用 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
 - id
 - name
 - mPrice
 - vPrice
 - duration

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

这是我得到的例外:

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

【问题讨论】:

标签: java mysql hibernate jpa jpa-2.0


【解决方案1】:

您不能在带有 JPA 查询的 order by 子句中使用“=”。如果你真的需要,你可以使用createNativeQuery 而不是createQuery

【讨论】:

【解决方案2】:

您需要使用=,这是一个比较运算符:

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 ";

【讨论】:

  • 尝试通过打印变量'query'的值来调试查询
  • 这里有错字,我的错!这是一个编译错误,如果没有分号,代码将无法编译。我的代码中有分号。
猜你喜欢
  • 2014-01-17
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
相关资源
最近更新 更多