我的问题是我有一个具有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的问题而无需使用提取联接?

值得注意的是,我将Java与Spring,JPA和Hibernate结合使用。

最佳答案

阅读一堆文档后,我发现LEFT FETCH JOIN语句就是为此目的而发明的。查询应为:

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

哪个完美。

关于java - 在具有可空列的表上进行JPQL Join Fetch,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28694929/

10-13 02:16