我的问题是这个;我有一个实体,有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。
答案 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
完美无缺。