2014-11-22 69 views
1

我是新來querydsl並且已經愛上了它,但我不能讓如何在此查詢中使用的別名。如何在querydsl中使用別名?

QProduct product = QProduct.product; 
    JPQLQuery jPQLQuery = 
      from(product) 
      .where(product.name.locate(searchTerm).as("score").gt(0).or(product.code.locate(searchTerm).as("score").gt(0))).groupBy(product.baseProd); 
    List<Product> matchedNames = jPQLQuery.orderBy(new NumberPath<Integer>(Integer.class, "score").asc()).offset((pageNumber-1)*10).limit(10).list(product); 

我首先想到的是這樣的事情會拋出一個錯誤與生成的查詢爲:

java.lang.IllegalArgumentException異常: org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌: 作爲近線3,列31 [從 mesoft.meshopframework.model.Product產物的選擇產品,其中 定位作爲評分> 2或定位(1,product.code?)如(1,product.name?)? 得分>?2分組由product.baseProd按評分排序asc]

可能有人告訴我coorect辦法做到這一點?我希望這不是必要的DB來排序重新計算product.name.locate(searchTerm)或其他一,

感謝

回答

1

JPQL具有比SQL更嚴格的語法,但我不認爲或者您的例子就是在SQL工作。

您不能使用別名,其中一部分訂單則需要挑​​選定位表達式或命令的一個由他們兩個。

+0

是啊,我試圖用一個定位表達式進行排序。但由於我是新來的查詢全世界共有,我看你不是,我可能會問「這是否意味着數據庫引擎將計算再次排序定位表達?和什麼辦法避免?」 – azerafati 2014-11-23 09:32:54

+0

重新計算方面取決於您的數據庫引擎。你使用哪一個? – 2014-11-23 17:45:40

+0

恩,所以數據庫引擎也可能會考慮這樣的事情?好! – azerafati 2014-11-23 18:37:31