Рассмотрим следующий запрос JPQL:
SELECT foo FROM Foo foo
INNER JOIN FETCH foo.bar bar
WHERE bar.baz = :baz
Я пытаюсь перевести это в запрос Critieria. Это до тех пор, пока я не получил:
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 с таким простым запросом?