JPQL Join Fetch在具有可空列的表上

时间:2015-02-24 11:43:59

标签: java hibernate jpql

我的问题是这个;我有一个实体,有2个其他实体列表。当我使用查询来选择它们时都是这样的;

select DISTINCT ru FROM RtsResource ru WHERE ru.resourceId= :arg1

我获得了大约500个休眠选择,而且速度非常慢。所以我试过;

select DISTINCT ru FROM RtsResource ru JOIN FETCH ru.projectResources JOIN FETCH ru.resourceSkills WHERE ru.resourceId= :arg1

哪个更快,但它只选择projectResources或resourceSkills不为null的查询。

有没有办法编写类似于第二个查询的查询,但也包括空值?

或者有没有办法解决#1的问题而不使用Fetch Joins?

值得注意的是我在Spring,JPA和Hibernate中使用Java。

1 个答案:

答案 0 :(得分:2)

在阅读了大量文档后,我发现LEFT FETCH JOIN语句是为此目的而发明的。查询应显示为;

select DISTINCT ru FROM RtsResource ru LEFT JOIN FETCH ru.projectResources LEFT JOIN FETCH ru.resourceSkills WHERE ru.resourceId= :arg1

完美无缺。