FetchMode是JPA 2规范中用于控制关联关系加载行为的一个设置,它决定了关联实体或集合在查询时如何被加载。在CriteriaQuery中,FetchMode通常与fetch()方法一起使用来优化数据加载策略。
JPA 2主要支持以下几种FetchMode:
// 基本使用示例
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Order> cq = cb.createQuery(Order.class);
Root<Order> order = cq.from(Order.class);
// 使用JOIN模式立即加载customer
order.fetch("customer", JoinType.LEFT);
// 使用SUBSELECT模式加载orderItems
Fetch<Order, OrderItem> orderItemsFetch = order.fetch("orderItems", JoinType.LEFT);
orderItemsFetch.fetch("product", JoinType.LEFT);
cq.select(order).where(cb.equal(order.get("status"), "ACTIVE"));
List<Order> result = entityManager.createQuery(cq).getResultList();
原因:默认SELECT模式可能导致大量单独查询 解决:对集合使用SUBSELECT模式或对单实体使用JOIN模式
原因:JOIN模式可能导致结果集过大 解决:合理使用DISTINCT或分批查询
原因:SELECT模式在Session关闭后访问关联数据 解决:确保在Session范围内访问或使用JOIN模式
FetchMode的正确使用可以显著影响JPA应用的性能,需要根据具体业务场景和数据特点进行合理选择。
没有搜到相关的文章