我已经成功地配置和映射了多个实体,一切正常。
现在我想使用一个自定义查询,将多个实体连接起来,并在这些实体上定义一些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子句及其限制之上呢。
您可以通过使用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中工作?
我一直在为下面的问题寻找答案,到目前为止什么也没有找到。
问题内容: 我有一个函数,该函数接受在where子句中使用的参数 函数(字符串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端过滤数据? 问