Я использую JPA2 с его API критериев для выбора моих сущностей из базы данных. Реализация - OpenJPA на WebSphere Application Server. Все мои объекты смоделированы с помощью Fetchtype = Lazy.
Я выбираю объект с некоторыми критериями из базы данных и хочу сразу загрузить все вложенные данные из подтаблиц. Если у меня есть модель данных, в которой таблица A соединена oneToMany с таблицей B, я могу использовать предложение Fetch в моем запросе критериев:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<A> cq = cb.createQuery(A.class);
Root<A> root = cq.from(A.class);
Fetch<A,B> fetch = root.fetch(A_.elementsOfB, JoinType.LEFT);
Это отлично работает. Я получаю элемент A, и все его элементы в B заполнены правильно. Теперь таблица B имеет отношение oneToMany к таблице C, и я тоже хочу загрузить их. Поэтому я добавляю к своему запросу следующее утверждение:
Fetch<B,C> fetch2 = fetch.fetch(B_.elementsOfC, JoinType.LEFT);
Но это ничего не даст.
Кто-нибудь знает, как получить многоуровневые объекты одним запросом?