JPA критерии присоединяются где - PullRequest
0 голосов
/ 21 октября 2019

Я хотел бы написать запрос присоединения 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

Разве мой множественный выбор не запрашивается из таблицы соединений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...