Как написать jpql для сущности + отсчет от этой сущности? - PullRequest
1 голос
/ 21 марта 2012

У меня есть класс Batch, который среди других свойств имеет список образцов (типа List<Sample>). Этот список отображается через отношение многие-к-одному (Пример 1-> n Пакет). Мне нужно иметь возможность получать все партии вместе с количеством образцов в каждой. Как бы я это сделал, не выполняя n + 1 запросов?

Кроме того, как мне сопоставить его с объектами?

TypedQuery<Batch> query = entityManager.createQuery("select b from Batch b"Batch.class);
List<Batch> batches = query.getResultList()

1 Ответ

2 голосов
/ 21 марта 2012

Поскольку у Batch есть свойство, тип которого равен List<Sample>, отношение Batch к Sample равно один ко многим.Вы должны аннотировать @OneToMany на List<Sample> внутри Batch и аннотировать @ManyToOne в свойстве Batch внутри образца.

Чтобы избежать проблемы n + 1, вы можете использовать fetch join для извлечения Batch вместе со списком образцов. Это приведет к тому, что hibernate сгенерирует левое соединение Batch и Sample, так что возвращаемый экземпляр Batch будет иметь своисписок образцов полностью инициализирован.

SELECT batch  FROM Batch batch join fetch batch.sampleList;
...