在 Hibernate 是我的持久性提供程序的项目中,我可以使用“join fetch”表达式发出查询,Hibernate 将生成反映该情况的 SQL: SQL 包含使用有效比较路径的连接表达式。
然而,EclipseLink 发出带有丑陋笛卡尔计划的 SQL,这严重损害了性能。在阅读这篇文章时,它提到急切地获取可能会生成笛卡尔计划,但它很方便地忘记了其他提供者(Hibernate)可以优化它。
那么,是否可以指示 EclipseLink 优化这些查询?我相信很少有关系可以通过使用 @FetchJoin 注释来优化,但我希望找到不包括在域模型上传播特定于 ORM 的注释的东西。
例如,这是我作为 JPQL 发出的(动态)查询:
String query = "select w from WorkOrder w " +
"inner join fetch w.type " +
"inner join fetch w.details " +
"inner join fetch w.project " +
"inner join fetch w.priority " +
"inner join fetch w.networkElement ";
这是 EclipseLink 输出:
SELECT t1.ID, t1.CREATION, ... (the fetch fields here)
FROM swa_network_element t5, swa_priorities t4, swa_dispatch_project t3, swa_work_order_detail t2, swa_work_orders t1, swa_work_order_type t0
WHERE ((t1.alpha_id LIKE '%TSK%') AND (((((t0.ID = t1.TYPE_ID) AND (t2.worder_id = t1.ID)) AND (t3.id = t1.project_id)) AND (t4.ID = t1.priority_id)) AND (t5.ID = t1.ne_id))) ORDER BY t1.CREATION DESC
最好的问候,罗德里戈哈特曼