2012-08-06 38 views
1

我有以下查詢(使用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:

+1

爲什麼你有'='呢? – Dahaka 2012-08-06 09:18:54

+1

我瞭解在這裏:http://stackoverflow.com/a/11823934/280924 – brainydexter 2012-08-06 09:19:57

+0

好你發現它。關於指出。 – Chris 2012-08-06 09:22:43

回答

1

你不能在order by子句中使用'=' JPA查詢。如果你真的需要,你可以使用createNativeQuery代替createQuery

+0

是否記錄在某處? – brainydexter 2012-08-06 09:35:20

+1

http://docs.oracle.com/cd/E11035_01/kodo41/full/html/ejb3_langref.html#ejb3_langref_orderby – tibtof 2012-08-06 09:45:44

+0

但無處關於不使用運營商的談判.. – brainydexter 2012-08-06 09:48:49

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

通過打印變量「查詢」的值嘗試調試查詢查詢 – Omesh 2012-08-06 09:26:25

+0

值是在調試窗口中正確。 – brainydexter 2012-08-06 09:28:06

+0

嘗試用分號編輯查詢結束時,沒有「:」這裏 – Omesh 2012-08-06 09:31:48