如何在querydsl中使用别名?

时间:2014-11-22 09:35:47

标签: java mysql hibernate 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产品在哪里   将(?1,product.name)定位为得分&gt; ?2或定位(?1,product.code)为   得分&gt; ?按产品分组.baseProd按分数顺序asc]

有人能告诉我这种方式吗?我希望DB无需再次计算product.name.locate(searchTerm)或另一个进行排序,

感谢

1 个答案:

答案 0 :(得分:1)

与SQL相比,JPQL的语法更受限制,但我不认为您的示例也适用于SQL。

您不能在where部分使用别名,而且对于您需要选择其中一个定位表达式或按两者排序。