Я пытаюсь получить объекты, используя eclipselink JPA, и ищу способ уменьшить количество запросов, выполняемых для получения одного объекта. Я считаю, что я должен использовать аннотацию @JoinFetch для извлечения дочерних объектов в том же запросе, что и основной объект. Это хорошо работает для одного уровня объединения, но не для нескольких уровней.
В приведенном ниже примере EntityA содержит коллекцию EntityB, которая содержит EntityC. Когда я получаю EntityA, я хочу, чтобы один запрос возвратил все 3 набора данных сущности. В действительности он генерирует 2 запроса: 1, соединяющий EntityA и EntityB, а затем отдельный запрос, объединяющий EntityB и EntityC.
Возможно ли объединить это в один запрос?
class EntityA {
@OneToMany(mappedBy = "entityALink", fetch = FetchType.EAGER)
@JoinFetch
private Collection<EntityB> entityBs;
}
class EntityB {
@JoinColumn(name = "X", referencedColumnName = "Y")
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private EntityA entityALink;
@JoinColumn(name = "A", referencedColumnName = "B")
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinFetch
private EntityC entityCLink;
}
class EntityC {
@Id
@Basic(optional = false)
@Column(name = "SomeColumn")
private String someField
}