2014-11-22 446 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