使用where子句加入多个实体并从中获取结果

时间:2017-08-23 08:32:37

标签: java spring-boot spring-data-jpa jpql

我已经成功配置并映射了多个实体,一切都按预期工作。

现在我想使用一个自定义查询,我加入多个实体并在那些上定义一些where子句。

public interface GiataItemRepository extends JpaRepository<GiataItem, String>{      
    @Query(value="select g from GiataItem g "
            + "join g.service s "
            + "join s.section se "
            + "join se.secPic sp "
            + "where g.giataId = :giataId "
            + "and se.secScope = 'MAINGALLERY' "
            + "and sp.category = 'MAINGALLERY' "
            + "and sp.seqOrder = 0")
    GiataItem findPicture(@Param("giataId") String giataId);
}

SQL为我GiataItem提供了正确的结果。但我没有我的where子句对所有其他映射实体的限制,如servicesection等。

我正在使用延迟加载,当我使用giataIetem.getService时它很清楚,JPA执行了一个新的选择,而我的where子句消失了。

那么我怎样才能让所有我加入的实体都建立在where子句及其限制之上。

1 个答案:

答案 0 :(得分:2)

您可以使用JOIN FETCH

来实现这一目标
@Query(value="SELECT g FROM GiataItem g "
        + "JOIN FETCH g.service as s "
        + "JOIN FETCH s.section as se "
        + "JOIN FETCH se.secPic as sp "
        + "WHERE g.giataId = :giataId "
        + "AND se.secScope = 'MAINGALLERY' "
        + "AND sp.category = 'MAINGALLERY' "
        + "AND sp.seqOrder = 0")

另外,请看看Vlad Mihalcea的答案:

How does the FetchMode work in Spring Data JPA