Я уже создал вопрос , перед которым было сложно. Поэтому я создаю новый, который будет настолько простым, насколько это возможно.
У меня проблема с Spring JPA, особенно с двойной вложенностью структуры.
Вот очень простая диаграмма отношений:
В стране несколько рек, и реки могут протекать через несколько стран. У реки есть несколько мостов, но мост можно построить только через 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 (если так как.)? Или мне нужно как-то изменить структуру базы данных?