当前位置: 首页 > 知识库问答 >
问题:

使用where子句连接多个实体并从中获得结果

罗昊空
2023-03-14

我已经成功地配置和映射了多个实体,一切正常。

现在我想使用一个自定义查询,将多个实体连接起来,并在这些实体上定义一些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子句对所有其他映射实体的限制,比如服务部分等等。

我使用的是惰性加载,当我使用giataIetem时,它是清晰的。getService,JPA将执行一个新的select和my where子句。

那么,我如何才能使我所有的连接实体建立在where子句及其限制之上呢。

共有1个答案

宿嘉庆
2023-03-14

您可以通过使用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的回答:

FetchMode如何在Spring Data JPA中工作?

 类似资料:
  • 我一直在为下面的问题寻找答案,到目前为止什么也没有找到。

  • 问题内容: 我有一个函数,该函数接受在whe​​re子句中使用的参数 函数(字符串x)->现在这将创建一个sql查询,该查询将 现在,我希望此函数提供所有行,即等于 当我通过x =“ All”时。 我想创建一个通用查询,当我传递“全部”时,它将返回所有行,否则将过滤我的结果。 问题答案: 只需将where条件排除在外即可。 如果您真的想要它那么复杂的用途 仅过滤空值。

  • 由于在抽象中解释我要做什么有点困难,所以我克隆了spring-boot-sample-data-jpa项目,并对其进行了修改,以展示我正在尝试做什么的示例。 我有这些模型类,您将注意到和扩展了实体。 我正在尝试编写一个查询,返回包含或的所有城市,其主要运动是给定类型的。 我编写了一个JPQL版本的查询,它有点难看(我不喜欢部分来表示它是一家水疗酒店),但似乎返回了我想要的。 但该查询的QueryD

  • 问题内容: 例如,我对我的书籍清单有动态过滤器,可以在其中设置特定的颜色,作者和类别。该过滤器可以一次设置多种颜色,也可以设置多种类别。 如何有条件地添加“ where”? 问题答案: 如您在API文档中所见,collection()方法返回一个CollectionReference。CollectionReference扩展了Query。Query.where()和Query.orderBy()

  • 下面是我开始使用的代码,但我不确定该去哪里。看看这个问题的解决方案,我似乎需要根据下面的查询下载数据,然后在客户端对其进行排序。我似乎做不到的事

  • 问题内容: 我正在尝试检索仅在到达日期和机场匹配时才返回飞行数据的数据。我似乎无法找出最佳解决方案。我只能在机场或到达日期相同的地方提取数据,而不能在两者都提取(只能使用一次)。这是我当前的Java代码如下所示: 这是数据本身: 当前的Java代码将返回 仅 具有相同机场的所有子级。如您所料,当客户端需要排序的数据量比上述测试数据大得多时,这是不可行的。如何更好地在Firebase端过滤数据? 问