Левое внешнее соединение JPA с использованием Java - PullRequest
0 голосов
/ 14 февраля 2019

Я застрял в проблеме, когда не могу выяснить, как создать левое внешнее объединение для двух таблиц, используя critQuery .У меня есть две таблицы A_1 и A_2

@Entity()
@Table(name = "A_1")
public class A1 {
    private long id_1;
    private long name;
    private long city;
}

@Entity()
@Table(name = "A_2")
public class A2 {
    private long id_2;
    private long a_1_id_1;
    private long name;
}

Я должен выяснить все те записи, которые присутствуют в таблице A_1, но отсутствуют в таблице A_2.id_1 в таблице A_1 совпадает с a_1_id_1 .

Для этого я пытаюсь выполнить запрос, подобный следующему:

select * from A_1 LEFT OUTER JOIN A_2 ON A_1.id_1 = A_2.a_1_id_1 where A_2.a_1_id_1 is NULL

Я получаю желаемые результаты из своего запроса.Но я не могу выяснить, как я могу изменить его на код, в основном это левая внешняя часть соединения .Я перепробовал множество вариантов из сети, но не смог найти решение.

Мой код выглядит примерно так:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Tuple> query = cb.createTupleQuery();
Root<A_1> root1 = query.from_1(A_1.class);
Root<A_2> root2 = query.from(A_2.class);
List<Predicate> predicates = getPredicates(cb, root1, root1, request);

Я не могу решить, как я могу использовать это дляполучить мои желаемые результаты.Заранее спасибо.

1 Ответ

0 голосов
/ 14 февраля 2019

Вы можете попробовать что-то вроде этого -

final Root<A_1> a1 = criteriaQuery.from(A_1.class);
Join<A_1, A_2> join1 = a1.join("joinColumnName", JoinType.LEFT);

Predicate predicate = criteriaBuilder.equal(A_2.<String> get("YOUR_COULMN"), value;
criteria.add(predicate);
criteriaQuery.where(predicate);
criteriaQuery.distinct(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...