Spring JPA - Несколько вложенных таблиц с применением предложения WHERE - PullRequest
0 голосов
/ 06 января 2020

Я уже создал вопрос , перед которым было сложно. Поэтому я создаю новый, который будет настолько простым, насколько это возможно.

У меня проблема с Spring JPA, особенно с двойной вложенностью структуры.

Вот очень простая диаграмма отношений:

enter image description here

В стране несколько рек, и реки могут протекать через несколько стран. У реки есть несколько мостов, но мост можно построить только через 1 реку. Итак, 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 (если так как.)? Или мне нужно как-то изменить структуру базы данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...