Добрый день, делаю свой первый проект (финансовое приложение) в котором если следующие Entity:
User - тут все понятно
Chapter - крупный раздел, например "Жилье", которое содержит категории.
Category - соответственно сами категории, продолжая пример - "Свет", "Газ", "Вода".
Operation - сама операция на какую то сумму.
Вопрос, как правильно установить связи между ними, на данный момент у меня сделано так:
public class User {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private List<Chapter> chapters;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private List<Category> categories;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private List<Operation> operations;
}
public class Chapter {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "chapter")
private List<Category> categories;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "chapter")
private List<Operation> operations;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
}
public class Category {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "category")
private List<Operation> operations;
@ManyToOne
@JoinColumn(name = "chapter_id")
private Chapter chapter;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
}
public class Operation {
@ManyToOne
@JoinColumn(name = "chapter_id")
private Chapter chapter;
@ManyToOne
@JoinColumn(name = "category_id")
private Category category;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
}
Помимо рекурсии с которой в целом понятно как бороться, возникает ряд других проблем.
Например, при сохранение Operation, надо получить объект User, Chapter и Category, а это дополнительные затраты
ресурсов, хотя достаточно было бы только id этих объектов.
В инете нашел инфу с какими то банальными примерами.
Если знаете хорошую статью или видео, где разбираются сложные структуры, скиньте пожалуйста.