JPA Deltaspike - предложение where, использующее атрибут сущности join / fetched - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь сделать запрос с предложением where, используя атрибут entity атрибута entity из предложения join / fetch, код выглядит так:

List<Questionnaire> data = criteria()
            .eq(Questionnaire_.status, statusActive)
            //.eq(Questionnaire_.responses.status, statusActive)//invalid code :(
            .fetch(Questionnaire_.responses, JoinType.LEFT) //can be fetch or join
            .orderDesc(Questionnaire_.title)
            .getResultList();

В двух связанных таблицах есть одна Отношение ко многим сопоставлено правильно, одна анкета имеет несколько ответов. Проблема заключается в том, что текущий запрос получает все анкеты ACTIVE с ALL ответами (включая ответы с мягким удалением).

Возможные решения, которые я подумал:

  • Использовать текстовый запрос JPQL
  • Использовать указанную библиотеку c как QueryDSL

Некоторые рекомендации или возможные решения?

ОБНОВЛЕНИЕ: Использование QueryDSL тот же запрос отлично работает с этим кодом:

// Metamodels
QQuestionnaire _questionnaire = QQuestionnaire.questionnaire;
QResponse _response = QResponse.response;
//Query
List<PollQuestionnaireOp> data = queryFactory
    .selectFrom(_questionnaire)
    .leftJoin(_questionnaire.responses, _response).fetchJoin()
    .where(
        _questionnaire.status.eq(statusActive),
        _response.status.eq(statusActive)
    )
    .orderBy(_questionnaire.title.desc())
    .fetch();
...