问题
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