카테고리 매핑
330
작성한 질문수 8
제가 블로그 어플리케이션을 한번 만들어 보고자 하는데
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
private Category parent;
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Category> child = new ArrayList<>();
하나의 카테고리 엔티티안에서 이런식으로 parent, child로 구성했더니 child는 parentid를 가지고 rootcategory의 경우 parentid는 null값을 가지는 하나의 테이블이 생성되었습니다.
저장의 경우 아주 잘되는데, 다만 문제가 parent category나 root category를 삭제했을 경우 자식 카테고리들은 전부 다 삭제되도록 하고 싶습니다.
그래서 아래의 코드와 같이 연관관계를 끊어주는 메서드도 만들었습니다.
public void cutCategoryRelation(Blog blog) {
blog.getCategories().remove(this);
if (this.getChild().isEmpty() && this.parent != null) {
this.parent.getChild().remove(this);
}
if (this.parent != null) {
this.parent.getChild().remove(this);
}
}
제 생각으로는 cascade.ALL을 사용했기 때문에 부모 -> 자식으로의 연관관계만 끊어주면 된다고 생각하는데 테스트에서 에러가 발생합니다.
구글링 해보니 Parent category와 child category를 나눠서 테이블을 두개 만들어줘야 cascade가 작동된다? 라고 이해한게 맞는지 잘 모르겠습니다.
그럼 무한 카테고리를 하려면 자식을 가진 부모 카테고리는 삭제가 불가능한 것일까요? (자식없는 카테고리는 잘 삭제됩니다!)
답변 1
0
안녕하세요. 스프링링님
cascade 옵션은 개인 소유에서만 사용할 수 있습니다.
관련해서 다음을 참고해주세요.
https://www.inflearn.com/questions/31969
이 경우 자식을 다른 곳에서 참조해서 사용하기 때문에 어렵습니다.
(자식을 그 자식이 참조해서 사용함)
이 경우 cascade 옵션 자체를 사용하지 않는 것을 권장합니다.
감사합니다.
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
55
2
inheritance startegy 선택시 고려사항
0
36
1
Entity 동등성 비교
0
38
1
실무 조언 관련 질문입니다.
0
65
1
H2데이터베이스 파일 생성
0
76
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
66
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
62
1
JPQL 메소드와 락
0
62
1
Delivery @OneToOne
0
70
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
104
2
UnsupportedOperationException 발생
0
97
3
H2 Database 연결이 안됩니다.
0
101
2
연관관계 매핑 질문드립니다.
0
93
2
h2데이터베이스 실행오류
0
114
2
persistence.xml
0
119
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
87
1
영속성 컨텍스트
0
74
1
JPA 프록시
0
105
1
Native Query와 MyBatis
0
81
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
97
1
임베디드 타입 예시 코드 관련 질문
0
125
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
100
3
인텔리제이 패키지 커서 단축키 질문
0
112
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
151
1





