首页 > 解决方案 > Spring JPA - 应用 WHERE 子句乘以嵌套表

问题描述

我已经创建了之前很复杂的问题。所以我正在创建一个尽可能简单的新版本。

我在使用 Spring JPA 时遇到问题,尤其是两次嵌套结构。

这是一个超级简单的关系图:

在此处输入图像描述

该国有多条河流,河流可以流经多个国家。这条河有多座桥梁,但这座桥只能建在一条河流上。所以 M:N -> 1:N

这是预期的结果:

{
  countries: [
    {
      countryID: 1,
      rivers: [
        {
          riverID: 1,
          bridges: [{
            bridgeID: 1
          }]
        }
      ]
    }
  ]
}

这就是我所拥有的。

国家实体

public class Country {
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Long id;

    ... more columns

    @ManyToMany(fetch = FetchType.EAGER,
            cascade = {
                    CascadeType.PERSIST,
                    CascadeType.MERGE
            })
    @JoinTable(name = "country_river",
            joinColumns = { @JoinColumn(name = "countryid") },
            inverseJoinColumns = { @JoinColumn(name = "riverid") })
    private Set<River> rivers = new HashSet<>();

河流实体

public class River {
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Long id;

    ... more columns


    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
    @JoinColumn(name = "riverid")
    private Set<Bridge> Bridges;

无需提及 Bridge 实体,因为仅指定了 ID 列(我使用的是单向关系)

问题是,桥不是根据国家过滤的。正如您在预期输出中看到的那样,我想列出所有国家以及给定国家的相关河流和桥梁。

我是否必须在 River 实体内的 Bridges 上创建自定义查询(如果是,如何。)?还是我必须以某种方式更改数据库的结构?

标签: databasespringspring-data-jpa

解决方案


推荐阅读