【发布时间】:2011-03-31 04:29:28
【问题描述】:
假设我们有:
@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 次:select * from item where order_id = ?
有什么办法可以优化吗?两个查询?一个查询?
(我们正在使用 EclipseLink)
谢谢。
【问题讨论】:
标签: java optimization jpa eclipselink one-to-many