sovadeveloper
@sovadeveloper

Может ли сущность ссылаться на саму себя (иметь связь)?

Возможно глупый вопрос, но нагуглить как-то не вышло каких-то примеров, а лично не сталкивался
Может ли сущность в Spring'е ссылаться на саму себя?

Что-то вроде такого:
@Entity
@Table(name = "category")
public class Category{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @OneToMany(mappedBy = "category", cascade = CascadeType.ALL)
    private List<Category> categories;

    @ManyToOne(fetch = FetchType.LAZY)
    private Category category;
}


Если более конкретно говорить и уйти от примера с Test, то задача такая, что нужно реализовать сущность категорий - причем там могут быть как корневые категории, так и подкатегории, следовательно почти всегда (за исключением основных категорий) будет какая-либо родительская
Ну и вот вопрос можно ли так делать и если да, то насколько это правильно/адекватно? Или может стоит подумать над доп. таблицей?

Про иерархию категорий тоже пример на всякий случай:

id root name
1 0 Основная категория 1
2 0 Основная категория 2
3 0 Основная категория 3
4 1 Вложенная категория 1
5 1 Вложенная категория 2
6 3 Вложенная категория 3

Ну как бы root это ссылка на id родительской категории, если 0, то соответственно это главная категория, которая не имеет родительской, как-то так

Заранее большое спасибо!)
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
sovadeveloper
@sovadeveloper Автор вопроса
Если вдруг кому-то будет полезно, то да, так можно сделать, но во избежание зацикленности пришлось юзать DTO. На сколько это правильно и адекватно вопрос все еще актуальный) Ну и неизвестно с какими трудностями придется столкнуться в дальнейшем при такой реализации
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽