JPQL不是选定的表达式错误

时间:2015-11-22 06:56:50

标签: jpa eclipselink jpa-2.0 jpql

我在ProductList Entity类中有以下JPQL,它按预期执行。

select DISTINCT new foo.bar.ProductListDTO(p.prodId, " +
CASE WHEN (p.prodId = 'ZCX') THEN CONCAT(p.prodDesc, ' - ', e.userId)
ELSE p.prodDesc END)  from   
ProductList p  LEFT JOIN p.productCatalogueList c  where c.userId='ZAM'

ProductListDTO类

public ProductListDTO(String prodId, String prodDesc, String userId) {

    this.prodId = prodId;
    this.prodName = prodDesc;
    this.userId = userId;
}

我想要实现的是将ORDER BY添加到查询中。将p.prodDesc添加到ORDER BY子句时,我收到错误 not a SELECTed expression因为p.prodDesc不是选定字段。如果我从prodName类添加ProductListDTO,那么它会 给出错误The identification variable 'appDesc' is not defined in the FROM clause

我在使用ProductListDTO构造函数时如何做ORDER BY prodDesc

1 个答案:

答案 0 :(得分:2)

首先,看起来您的构造函数需要3列,但如果只有2列,则调用。

其次,看起来你的问题是因为SELECT中的CASE构造了ProductListDTO。

我建议将你的逻辑从查询转移到构造函数,做出类似这样的事情:

    select DISTINCT new foo.bar.ProductListDTO(p.prodId, p.prodDesc, e.userId) from   
    ProductList p  LEFT JOIN p.productCatalogueList c  where c.userId='ZAM'
    ORDER BY p.prodDesc

public ProductListDTO(String prodId, String prodDesc, String userId) {    
    this.prodId = prodId;
    if ("ZCX".equals(prodId)) {
       this.prodDesc = prodDesc + " - " + userId;
    } else {
       this.prodDesc = prodDesc;
    }
}
祝你好运!