如何在querydsl中使用别名?
问题描述:
我是新来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)
或其他一,
感谢
答
JPQL具有比SQL更严格的语法,但我不认为或者您的例子就是在SQL工作。
您不能使用别名,其中一部分订单则需要挑选定位表达式或命令的一个由他们两个。
是啊,我试图用一个定位表达式进行排序。但由于我是新来的查询全世界共有,我看你不是,我可能会问“这是否意味着数据库引擎将计算再次排序定位表达?和什么办法避免?” – azerafati 2014-11-23 09:32:54
重新计算方面取决于您的数据库引擎。你使用哪一个? – 2014-11-23 17:45:40
恩,所以数据库引擎也可能会考虑这样的事情?好! – azerafati 2014-11-23 18:37:31