작성
·
216
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
여기에 질문 내용을 남겨주세요.
cascadeType.all! 일단 저장할때 자식 객체를 다 담은 후 이후 부모 를 repository.save(부모) 하면 자식도 함께 저장되는 것을 강의 내용을 통해서 확인했습니다.
그러면 혹시 이 과정에 대해서는 어떻게 생각하시나요
Program program = programRepository.findById(reviewSaveDto.getProgramId())
.orElseThrow(() -> new NotFoundException(ErrorCode.PROGRAM_NOT_FOUND));
Review review = Review.builder()
.content(reviewSaveDto.getContents())
.user(user)
.program(program)
.rating(reviewSaveDto.getRating())
.genre(usersFirstGenre.getName())
.build();
program.addReview(review);
보시면 program 을 리포지토리에서 찾아와서 Review 를 직접 생성한 후 addReview(review) 를 통해서 저장합니다.
@OneToMany(mappedBy = "program", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Review> reviewList = new ArrayList<>();
public void addReview(Review review) {
this.reviewList.add(review);
당연히 cascade가 발라져있고요!.
이러면 코드는 정상동작합니다.
저는 뭔가 ReviewRepository에서 program 세팅하고 이러는 것 보다 위 방법이 더 뭐랄까 직관적이다?(프로그램.addReview가 직관적이라는 느낌) 이라서 이 것을 애용했는데 성능 상의 문제점이라던가 이런게 있을지 궁금합니다. addReview 를 한다고 바로 저장되지 않고 트랜잭션이 끝날때 변경 감지를 통해서 실행되는것 같은데(뇌피셜입니다) . 이렇게 해도 괜찮을지 궁금해요!!! 영한님!!!
답변 1
1
그 정말 항상 너무 감사하고 고마운데 마지막 부분에 대한 답변이 빠졌네욤..
만약 1번이 문제라는 의미시라면 만약 자식이 부모에 종속되는 상황이 오면(review 가 program에만 온전히 종속된다고 가정할게요!)
단순 부모(program)를 저장할 때 함께 자식(review)을 저장하는 것이 아닌(=>영한님이 설명하셨던 함께 cascade를 통해 저장이 편리했던 강의 내용)
부모(program)를 repository 에서 꺼내와서 cascade 를 통해 자식(review)을 저장해도 되는 것인지 (위에 제가 질문했던 코드) 궁금합니다.
이 부분이 사실 궁금했습니다. 자꾸 귀찮게 해서 죄송합니다 ㅠ
답변 너무 감사하지만 아직 의문점이 남아있습니다! 죄송합니다 ㅠ
1) 프로그램 - 리뷰 - 유저 의 다대다 관계에서 리뷰가 프로그램에만 종속되지 않고 User 에도 종속되기 때문에 cascade Type 을 쓰지 마시라는 의미인지
2) 혹은 제가 아직 이해하지 못한 다른 의미가 있는 것인지
만약 1번이 문제라는 의미시라면 만약 자식이 부모에 종속되는 상황이 오면(review 가 program에만 온전히 종속된다고 가정할게요!)
단순 부모(program)를 저장할 때 함께 자식(review)을 저장하는 것이 아닌(=>영한님이 설명하셨던 함께 저장이 편리했던 강의 내용)
부모(program)를 repository 에서 꺼내와서 cascade 를 통해 자식(review)을 저장해도 되는 것인지 (위에 제가 질문했던 코드) 궁금합니다.