【问题标题】:JPQL Join Fetch on a table with nullable columnsJPQL Join Fetch 在具有可为空列的表上
【发布时间】:2015-02-24 11:43:59
【问题描述】:

我的问题是这样的;我有一个包含 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 不为空的查询。

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

或者,有没有办法在不使用 Fetch Joins 的情况下解决 #1 的问题?

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

【问题讨论】:

    标签: java hibernate jpql


    【解决方案1】:

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

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

    效果很好。

    【讨论】:

      猜你喜欢
      • 2016-10-07
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 2014-08-12
      • 2013-02-03
      相关资源
      最近更新 更多