JPQL Not a Selected Expression error

六眼飞鱼酱① 提交于 2019-12-23 02:55:27

问题


I have the following JPQL in ProductList Entity class which executes as expected.

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 class

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

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

What I would like to achieve is add ORDER BY to the query. When p.prodDesc is added to ORDER BY clause, I am getting error not a SELECTed expression because p.prodDesc is not a selected field. if I add prodName from ProductListDTO class then it would give error The identification variable 'appDesc' is not defined in the FROM clause.

How can I do ORDER BY prodDesc as I am using ProductListDTO constructor


回答1:


First, looks like your constructor is expecting 3 columns, but you are calling if with only 2 columns.

Second, seems like your problem is because of the CASE inside the SELECT to construct the ProductListDTO.

I would suggest to move your logic from query to the constructor, to make something like this:

    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;
    }
}

Good luck!



来源:https://stackoverflow.com/questions/33852430/jpql-not-a-selected-expression-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!