我是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产品在哪里 将(?1,product.name)定位为得分&gt; ?2或定位(?1,product.code)为 得分&gt; ?按产品分组.baseProd按分数顺序asc]
有人能告诉我这种方式吗?我希望DB无需再次计算product.name.locate(searchTerm)
或另一个进行排序,
感谢
答案 0 :(得分:1)
与SQL相比,JPQL的语法更受限制,但我不认为您的示例也适用于SQL。
您不能在where部分使用别名,而且对于您需要选择其中一个定位表达式或按两者排序。