по какой-то причине я не могу сказать, есть исключение, когда я пытаюсь получить список из CriteriaQuery, используя подзапрос. помогите кто нибудь!!! вот код:
public String[] getProductsDistinctBySubQueriesName(String category) {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Tuple> criteria = builder.createTupleQuery();
//subquery
Subquery<Integer> subqueries = criteria.subquery(Integer.class);
Root<Productscategory> productCategory = subqueries.from(Productscategory.class);
subqueries.select(productCategory.<Integer>get("productscategoryid"))
.where(builder.equal((productCategory.<String>get("productcatgoryname")), category));
//outerquery
Root<Products> root = criteria.from(Products.class);
criteria.multiselect(root.get(Products_.productname)).distinct(true)
.where(builder.in(root.get("productscategoryid")).value(subqueries));
List<Tuple> tupleResult = em.createQuery(criteria).getResultList(); // the exception is thrown here
String[] arrayProducts = new String[tupleResult.size()];
for (int i = 0; i < tupleResult.size(); i++) {
arrayProducts[i] = (String) tupleResult.get(i).get(0);
}
return arrayProducts;
}
вот исключение
Попробуйте использовать этот запрос вместо вашего, он отлично работает с провайдером EclipseLink, не уверен, что ваш запрос не работает в eclipselink, но работает в спящем режиме, я протестировал приведенный ниже запрос, и вы сможете выбирать продукты на основе ProductCategoryName.