결론부터 말하면 방향(누가 누구를 바라보느냐)에 따라 이름이 달라지기 때문이다. 네가 헷갈려하는 부분은 "관계의 전체적인 그림"과 "객체 입장에서의 시선"을 혼동했기 때문일 가능성이 크다. JPA 어노테이션(@ManyToOne, @OneToMany)은 항상 "나(현재 필드를 가진 객체)"를 기준으로 "너(상대방 객체)"가 몇 개인지를 정의한다. 아래 설명을 통해 오해를 풀어보자.
1. 관계를 정의하는 공식
JPA 어노테이션은 항상 @MeToYou (나 To 너) 순서로 읽어야 한다.
- Left (Me): 이 어노테이션이 붙은 클래스 (또는 인스턴스)
- Right (You): 이 필드가 가리키는 대상
2. 자식 입장 (CategoryEntity -> parent)
@ManyToOne // (Me = Many, You = One)
@JoinColumn(name = "parent_id")
private CategoryEntity parent;
- 나(Me): CategoryEntity 인스턴스들 (휴대폰, TV, 컴퓨터...)
- 너(You): parent 필드가 가리키는 대상 (전자기기)
해석:
"나 같은 자식들(휴대폰, TV...)은 여럿(Many) 존재하지만, 우리가 가리키는 부모(전자기기)는 단 하나(One)다."
그래서 @ManyToOne이다.
❌ 네가 생각한 "일대다(OneToMany)"가 되려면?
"나(휴대폰) 하나가 부모를 여럿(전자기기, 가구, 식품...) 동시에 가질 수 있어야 한다."
하지만 계층 구조에서 휴대폰의 직속 부모는 '전자기기' 하나뿐이다.
3. 부모 입장 (CategoryEntity -> children)
@OneToMany // (Me = One, You = Many)
private List<CategoryEntity> children = new ArrayList<>();
- 나(Me): CategoryEntity 인스턴스 (전자기기)
- 너(You): children 리스트에 담긴 대상들 (휴대폰, TV, 컴퓨터...)
해석:
"나(전자기기)는 하나(One)인데, 내가 거느린 자식들(휴대폰, TV...)은 여럿(Many)이다." 그래서 @OneToMany이다.
4. 그림으로 정리 (Database 관점)
데이터베이스 테이블(categories)을 보면 이해가 더 빠르다. FK(Foreign Key)인 parent_id가 어디에 있는지를 보자.
| id (PK) | name | parent_id (FK) | 설명 |
| 1 | 전자기기 | NULL | 부모 (Root) |
| 2 | 가구 | NULL | 부모 (Root) |
| 10 | 휴대폰 | 1 | 자식 -> 부모(1)를 바라봄 |
| 11 | 컴퓨터 | 1 | 자식 -> 부모(1)를 바라봄 |
| 20 | 탁자 | 2 | 자식 -> 부모(2)를 바라봄 |
분석:
- 자식(Row 10, 11) 입장: parent_id 컬럼에는 오직 하나의 값(1)만 들어갈 수 있다. 즉, 부모는 하나다. (Many To One)
- 부모(Row 1) 입장: ID가 1인 데이터를 참조하는 녀석들은 10번, 11번 등 여러 행이 존재한다. (One To Many)
요약
네가 생각한 "자식 입장에서 부모와의 관계"가 1:N이 되려면, 한 자식이 여러 부모를 가져야 한다. (예: '휴대폰'이 '전자기기'에도 속하고 '가구'에도 속하는 경우).
하지만 일반적인 카테고리 트리 구조에서는:
- 자식 → 부모: 다수가 하나를 바라봄 (Many-To-One)
- 부모 → 자식: 하나가 다수를 거느림 (One-To-Many)
이 법칙이 적용되므로 코드는 정확하게 작성된 것이 맞다.
'Spring > JPA' 카테고리의 다른 글
| [Optimization-1] 기초(1) - 현대 백엔드 개발의 표준, JPA의 본질 (0) | 2025.12.26 |
|---|---|
| [Practice-6] 단뱡향/양방향 선택 기준 (⭐⭐⭐) (0) | 2025.12.25 |
| [Practice-4] Spring Data: 무한 깊이 조회 패턴 (댓글/대댓글, 카테고리) (0) | 2025.12.16 |
| [Practice-3] Spring Data: Enum 고도화 (0) | 2025.12.16 |
| [Practice-2] 연관관계 편의 메서드 (1) | 2025.08.31 |