Я хотел бы написать запрос присоединения jpa, который мне удается запросить через sql.
SELECT a.optionSubId, b.name, COUNT(*)
FROM resultservice.result a
LEFT JOIN resultservice.options_sub b ON a.optionSubId = b.id
WHERE a.optionId = 1 AND a.gender = "Male"
GROUP BY a.optionSubId;
ниже приведен мой запрос по критерию jpa
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Object[]> criteriaQuery = criteriaBuilder.createQuery(Object[].class);
Root<Result> root = criteriaQuery.from(Result.class);
Join<Result, OptionsSub> join = root.join("optionsSub");
// join.on(criteriaBuilder.equal(root.get("optionsSub"), join.get("id")));
// where between date
List<Predicate> conditionsList = new ArrayList<>();
Path<Date> dateEntryPath = root.get("enquiryDate");
Predicate datePredicate = criteriaBuilder.between(dateEntryPath, startDate, endDate);
conditionsList.add(datePredicate);
Path<String> genderEntryPath = root.get("gender");
if (gender.equals("Male")) {
Predicate agePredicate = criteriaBuilder.equal(genderEntryPath, male);
conditionsList.add(agePredicate);
} else if (gender.equals("Female")) {
Predicate agePredicate = criteriaBuilder.equal(genderEntryPath, female);
conditionsList.add(agePredicate);
}
Path<Long> optionsSubEntryPath = root.get("options");
Predicate optionsSubPredicate = criteriaBuilder.equal(optionsSubEntryPath, optionsId);
conditionsList.add(optionsSubPredicate);
Path<Integer> ageEntryPath = root.get("age");
Predicate agePredicate = criteriaBuilder.between(ageEntryPath, startAge, endAge);
conditionsList.add(agePredicate);
criteriaQuery
.multiselect(
root.get(Result_.ID),
join.get(OptionsSub_.NAME))
.where(conditionsList.toArray(new Predicate[] {}))
.groupBy(root.get(Result_.OPTIONS_SUB));
Query query = em.createQuery(criteriaQuery);
List test = query.getResultList();
Но я продолжаюполучаю эту ошибку, что
SELECT list is not in GROUP BY clause and contains nonaggregated column 'resultservice.result0_.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Разве мой множественный выбор не запрашивается из таблицы соединений?