Допустим, у нас есть:
@Entity public class Order {
@Id private int id;
@OneToMany(mappedBy="order") private List<Item> items;
...
}
и
@Entity public class Item {
@Id private int id;
@ManyToOne private Order order;
...
}
И скажем, есть 10.000 заказов, каждый из которых имеет 20 предметов.
Нам нужно перебрать мысли всех порядков и всех их предметов.
Каков наилучший способ сделать это в JPA?
Моя проблема в том, что если я просто переберу элементы, например:
for (Order order: em.createTypeQuery("select o from Order o", Order.class).getResultList()) {
report.printOrder(order);
for (Item item: order.getItems()) {
report.printOrderItem(item);
}
}
это приведет к 10,001 запросов sql:
1 раз: выберите * из заказа
10.000 раз: выберите * из позиции, где order_id =?
Есть ли способ оптимизировать его? Два запроса? Один запрос?
(мы используем EclipseLink)
Спасибо.