Как написать запрос критериев JPA, выберите с помощью JOIN - PullRequest
0 голосов
/ 10 июля 2020

У меня возникла проблема с тем, как написать Присоединиться, а затем выбрать из приложения

, поэтому у меня есть сущности Приложение и Деактивировано

деактивировано, имеет поле:

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "application_id")
private Application application;

И приложение имеет:

@Id
private Long id;

Я не знаю, как описать проблему словами, поэтому я просто вставлю, где JPQL:

ВЫБРАТЬ ИЗ приложений ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ deactivated_applications da на a.id = da.application_id WHERE da.filedeactivated = false;

КОД ДЛЯ ЗАПРОСА, который я получил параметры для:

{    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Application> cq = criteriaBuilder.createQuery(Application.class);
        Root<Application> root = cq.from(Application.class);
        //SearchQuery to TO SQLsearchQuery to specification, to Predicate
        Predicate searchQueryPredicate = null;
        if (!searchQuery.getCriteria().isEmpty())
            searchQueryPredicate = SqlSearchQuery.of(searchQuery).toSpecification(Application.class).toPredicate(root, cq, criteriaBuilder);}

теперь мне нужно запустить этот запрос на предыдущем SQL запросе

1 Ответ

0 голосов
/ 10 июля 2020

Это похоже на проблему, которую можно решить с помощью подзапроса.

Чтобы сделать выбор из приложений, в которых идентификатор приложения принадлежит деактивированному приложению, где filedeactivated имеет значение false, используйте следующий вид структура запроса:

SELECT a FROM applications a WHERE a.Id MEMBER OF (SELECT b.application_id FROM deactivatedapplications b WHERE b.filedeactivated = false)

Этот метод описан на примере книг и авторов в https://thorben-janssen.com/jpql/#Subselects, где Торбен использует подзапрос для выбора авторов, написавших более одной книги.

...