Spring Boot Jpa过滤器子

snvhrwxg  于 2023-11-19  发布在  Spring
关注(0)|答案(1)|浏览(109)

我正在使用Sping Boot JPA规范根据过滤条件过滤记录。我有一个Parent和2个子表。这两个子表有另一个公共parent2。我需要检索Parent记录沿着与公共parent2 id匹配的子记录。
select * from parent join child1 on ... join child2 on ... where child1.another_parent_id = ... or child2.another_parent_id = ...
这里的问题是,它检索父记录,如果我执行parent.getChild1或parent.getChild2,它将返回child1和child2的所有记录,而不仅仅是another_parent_id的匹配记录。
有没有可能用spring Boot jpa规范来实现这一点?
一种方法是为child1和child2创建单独的存储库,然后过滤结果,然后合并获取结果。在这里,我需要命中2个查询,如果child1和child2的结果都返回相同的父项,那么我需要过滤唯一的记录。
先谢了。

g2ieeal7

g2ieeal71#

沿着父记录,您还可以捕获查询返回的子记录。您可以将查询结果Map到DTO。
1.定义DTO:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class ResultDto implements Serializable {
   private Parent p;
   private Child1 ch1;
   private Child2 ch2;
}

字符串
1.查询并将结果Map到dto。

@Query("SELECT new com.jpatest.jpaexploration.dto.ResultDto(p, ch1, ch2) FROM parent p join Child1 ch1 on ... join Child2 ch2 on ... where ch1.another_parent_id = ... or ch2.another_parent_id = ...")
List<ResultDto> getResults();


此dto列表将仅包含查询返回的子项。

相关问题