Мне трудно найти хорошие примеры того, как создать критерий запроса с внутренним объединением.
Я создал запрос ниже, это то, что я хотел бы сделать с критериями.
SELECT DISTINCT *
FROM DT_DOCUMENT as document
INNER JOIN DT_TRANSLATION as translation
ON translation.language_id IN(1, 2, 3)
WHERE document.id = translation.document_id
AND document.title LIKE '%Document%';
Вернуть все документы с заголовком Документ и переводы с идентификаторами 1,2 и 3.
Мне удалось создать 2 разных выбора с критериями, но я не могу сгенерировать внутреннее соединение между этими таблицами для унификации кода.
Запрос критериев перевода
CriteriaQuery<Translation> translationQuery = builder.createQuery(Translation.class);
Root<Translation> translation = translationQuery.from(Translation.class);
List<Long> ids = new ArrayList<>();
ids.add(1);
ids.add(2);
ids.add(3);
Predicate idPredicate = translation.in(ids);
translationQuery.where(idPredicate);
translationQuery.distinct(true);
TypedQuery<Translation> query =
this.entityManager.createQuery(translationQuery);
query.getResultList();
Вернуть все переводы с id 1,2 и 3;
Запрос критериев документа
CriteriaQuery<Document> documentQuery = builder.createQuery(Document.class);
Root<Document> document = documentQuery.from(Document.class);
Predicate titlePredicate = builder.like(document.get("title"), "%Document%");
documentQuery.where(titlePredicate);
TypedQuery<Document> query = this.entityManager.createQuery(documentQuery);
query.getResultList();
Вернуть все документы с заголовком Документ.
Любой совет? Благодаря.