Я использую JPA2 с его Criteria API для выбора моих сущностей из базы данных.Реализация - OpenJPA на сервере приложений WebSphere.Все мои сущности смоделированы с помощью 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);
Но это ничего не сделает.
Кто-нибудь знает, как получить многоуровневые объекты в одном запросе?