jav*_*ats 5 performance orm jpa eclipselink
在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 ";
Run Code Online (Sandbox Code Playgroud)
这是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
Run Code Online (Sandbox Code Playgroud)
最诚挚的问候,罗德里戈哈特曼
小智 3
尝试使用:
@org.eclipse.persistence.annotations.JoinFetch(JoinFetchType.INNER)
- 或者 -
@org.eclipse.persistence.annotations.JoinFetch(JoinFetchType.OUTER)
对于可为空的列,建议使用外连接。
我在此博客中找到了更多信息:http://vard-lokkur.blogspot.com/2010/09/jpa-demystified-episode-1-onetomany-and.html
问候,
维克托·托托雷洛·内托