getOn в Join in Criteria Builder не работает - PullRequest
0 голосов
/ 24 октября 2019

Я хочу объединить две таблицы и удалить предложение on в запросе на соединение, чтобы установить новое пользовательское предложение on, однако я всегда получаю нулевой предикат от "joinb", поэтому косяк не может быть объединен с большим количеством условий. Мой код ниже.

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<myClass> query = cb.createQuery(myClass.class);

Root<a> a = query.from(a.class);
Join<a, b> joinb = a.join("b", JoinType.INNER);
Predicate joinBOn = b.getOn();
b.on(cb.or(joinBOn, cb.or("condition1", "condition2")));

Проблема здесь в том, что joinBOn всегда нулевой. Я новичок, поэтому не знаю, что происходит.

1 Ответ

0 голосов
/ 24 октября 2019

Как задокументировано, getOn ()

Возвращает предикат, который соответствует ограничению (ям) ON для соединения, или ноль, если не было задано условие ON.

В этом случае явно не указано условие ВКЛ, поэтому ожидается null. Это не проблема, потому что получение текущего ограничения ON необязательно:

Predicate condition1 = ...
Predicate condition2 = ...
b.on(cb.or(condition1, condition2));
...