Рассмотрим следующий запрос JPQL:
SELECT foo FROM Foo foo
INNER JOIN FETCH foo.bar bar
WHERE bar.baz = :baz
Я пытаюсь перевести это в запрос Criteria. Это насколько я понял:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Foo> cq = cb.createQuery(Foo.class);
Root<Foo> r = cq.from(Foo.class);
Fetch<Foo, Bar> fetch = r.fetch(Foo_.bar, JoinType.INNER);
Join<Foo, Bar> join = r.join(Foo_.bar, JoinType.INNER);
cq.where(cb.equal(join.get(Bar_.baz), value);
Очевидная проблема заключается в том, что я дважды выполняю одно и то же соединение, потому что у Fetch<Foo, Bar>
, похоже, нет способа получить Path
. Есть ли способ избежать необходимости присоединяться дважды? Или мне нужно придерживаться старого доброго JPQL с таким простым запросом?