Я пытаюсь сделать запрос с предложением 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();