• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

단방향 연관관계 때 삭제시 연관된 테이블 모두 삭제 질문

23.12.19 14:25 작성 조회수 150

1

[질문 내용]
제가 유저를 삭제해줄 때 그 유저가 작성한 게시글, 댓글, 장바구니를 삭제해주려고 합니다.

유저와 게시글, 댓글, 장바구니는 단방향연관관계를 가지고 있도록 구성했는데 그 이유는 양방향은 필요할 때 사용하고 그 외에는 단방향으로 구성하려고 했기 때문인데 유저에 양방향으로 각각의 데이터를 가지고 있을 필요가 없다고 생각해서 단방향으로 했습니다.

 

제가 알고있기로는 양방향으로 이어져 있으면 등록, 수정, 삭제 할 때 cascade로 처리하고 고아 객체 삭제하는 orphanRemoval = true 을 같이 사용하면 삭제되지만 이것들은 양방향 연관관계 때 사용하고 일대다` 인 부분에서 다쪽에 써야하는 것으로 알고 있습니다. 예를들어, @OneToMany 이렇게 양방향으로 이어져 있으면 이 객체가 다인쪽에 연결하니 이 객체가 다니까 이쪽에 cascade와 orphanRemoval = true를 사용하는걸로 이해하고 있습니다.

 

단방향에서는 각자의 레포가 별도로 되어 있으니 각각 삭제해주는 걸로 알고 있어서 다음과 같이 별도의 레포에 해당 하는 유저를 모두 삭제하는 방법을 선택했는데 제가 맞는 선택을 했는지 제가 제대로 이해한게 맞는지 궁금합니다.

 

    public String removeUser(Long memberId, String email) {
        // 회원 조회
        MemberEntity findUser = memberRepository.findByEmail(email);
        log.info("email check : " + email);
        log.info("email check2 : " + findUser.getEmail());

        // 회원이 비어있지 않고 넘어온 id가 DB에 등록된 id가 일치할 때
        if (findUser.getMemberId().equals(memberId)) {
            boardRepository.deleteAllByMemberMemberId(memberId);
            commentRepository.deleteAllByMemberMemberId(memberId);
            cartRepository.deleteAllByMemberMemberId(memberId);
            memberRepository.deleteByMemberId(memberId);
            return "회원 탈퇴 완료";
        } else {
            return "해당 유저가 아니라 삭제할 수 없습니다.";
        }
    }

답변 1

답변을 작성해보세요.

1

y2gcoder님의 프로필

y2gcoder

2023.12.19

안녕하세요. 유요한님, 공식 서포터즈 y2gcoder입니다.

그렇게 하시면 될 것 같습니다! 혹시 모를 상황을 대비하여 한 트랜잭션 내에서 처리하면 좋을 것 같습니다!

감사합니다.