У меня есть таблица продуктов, у которой есть связанная таблица. Изображения с отношением 1: M.
Class Product {
private Integer productId;
private String productName;
....
....
....
private List<Image> productImageList;
....
....
....
}
Class Image{
private Integer imageId;
private String imageName;
}
Class ProductLite{
private Integer productId;
private String productName;
private String imageName;
}
Я пытаюсь выполнить запрос JPQL, в котором хочу запросить продукты и первое изображение из productImageList и вернуть объект ProductLite с использованием нового конструктора.
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public List<ProductLite> getAllProductLite() {
Query q = em.createQuery("SELECT NEW com.mycomp.application.entity.ProductLite(p.productId, p.productName, p.productImageList.get(0).getImageName())"
+ " from Product p"
+ " ORDER by p.productName");
List<ProductLite> prods = q.getResultList();
return prods;
}
Но по какой-то причине я не могу заставить его работать. Я получаю NoViableException. Поэтому я попытался переместить логику получения первого изображения (метод getImage ()) в объект Product, чтобы в запросе я мог просто вызвать getImage (). Даже это не похоже на работу.
java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager:
Exception Description: Syntax error parsing the query [SELECT NEW com.meera.application.entity.ProductLite(distinct p.productId, p.productName, p.getImage()) from Product p, IN(p.productImageList) pil where p.category.categoryCode = :categoryCode ORDER by p.productName ], line 1, column 52: unexpected token [distinct].
Internal Exception: NoViableAltException(23@[452:1: constructorItem returns [Object node] : (n= scalarExpression | n= aggregateExpression );])
Любая помощь приветствуется.