티스토리 뷰
회원로직, 게시글 crud, 댓글 crud까지 다 구현한 후에 포스트맨으로 전체적으로 한 번씩 확인을 해주었다.
회원탈퇴 오류
근데... 회원로직만 테스트했을 땐 잘 됐던 회원탈퇴가 갑자기
이런 오류가 뜨면서 안됐다..ㅜㅜ
trace를 잘 읽어보니 외래키 제약조건과 관련된 문제였다.
member 테이블에서 member_id를 기반으로 한 행을 삭제하려고 시도했으나, article 테이블에 member_id를 참조하는 외래 키(FK6l9vkfd5ixw8o8kph5rj1k7gu)가 있어서 해당 작업이 실패한 것이다.
즉 로그인한 회원이 게시글을 쓴 상태에서 탈퇴를 하려니, 게시글에서 회원의 정보를 외래키로 갖고 있기 때문에 게시글 - 회원 간 제약조건을 설정하지 않으면 회원의 정보를 지울 수 없다(회원 탈퇴를 할 수 없다)는 것이다.
생각해보니 게시글 북마크와 댓글 좋아요 엔티티를 구현할 때도
public class Bookmark {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "member_id")
@OnDelete(action = OnDeleteAction.CASCADE)
private Member member;
@ManyToOne
@JoinColumn(name = "article_id")
@OnDelete(action = OnDeleteAction.CASCADE)
private Article article;
이렇게 @OnDelete(action = OnDeleteAction.CASCADE)를 사용해서 멤버 즉 회원이 지워지면, 북마크 릴레이션도 자동으로 삭제되게 외래키 제약조건을 설정해주었다. 그러니 로그인한 회원이 어떤 게시글들을 북마크하고 (자신이 쓰지 않은 게시글들 중에) 탈퇴를 해도, 탈퇴하는 동시에 북마크 릴레이션도 자동으로 삭제가 되기 때문에 아무 오류도 나타나지 않았던 것이다..!
회원탈퇴를 해도 회원이 작성했던 게시글과 댓글은 남아있게 하고 싶다면,,,?
회원 탈퇴를 하면 계정 자체가 사라지는 것이기 때문에 그 회원이 북마크했던 db들은 남겨둘 필요가 없지만,
탈퇴한 회원이 작성했던 게시글과 댓글은 남아있게 하고 싶었다.
그럼 멤버가 지워지면, article과 comment 테이블에서 member_id 컬럼을 null로 만들면 되겠다!!고 생각하고
public class Comment {
.
.
.
@OnDelete(action = OnDeleteAction.SET_NULL)
@ManyToOne
@JoinColumn(name="member_id")
private Member member;
.
.
.
}
public class Article {
.
.
.
@OnDelete(action = OnDeleteAction.SET_NULL)
@ManyToOne
@JoinColumn(name="member_id")
private Member member;
.
.
.
}
@OnDelete(action = OnDeleteAction.SET_NULL)를 추가해주었다!!
짜잔. member_id 컬럼이 null로 바뀐 것을 볼 수 있다.
'Spring' 카테고리의 다른 글
스프링(자바) 키워드 모음 #1 (1) | 2024.04.09 |
---|---|
스프링 커뮤니티 만들기 #10 -회원탈퇴 시 오류해결 2 (NullpointerException) (0) | 2024.03.03 |
스프링 커뮤니티 만들기 #8 북마크 목록 조회 (0) | 2024.03.03 |
스프링 커뮤니티 만들기 #7 - 게시글 북마크 (0) | 2024.03.03 |
스프링 커뮤니티 만들기 #6 - 댓글 좋아요 (2) | 2024.03.03 |
- Total
- Today
- Yesterday
- 스프링 북마크
- 영속
- 웹MVC
- 지연로딩
- 북마크
- DP
- 스프링 커뮤니티
- 자바
- 다이나믹 프로그래밍
- 스프링부트
- 로그아웃
- 프론트엔드
- 백준
- SQL 레벨업
- EnumType.ORDINAL
- 커뮤니티
- 준영속
- SQL
- 스프링
- JPA
- 파이썬
- 로깅
- elasticsearch
- 백준 파이썬
- 웹 MVC
- 자바 스프링
- 비영속
- 회원탈퇴
- SQLD
- 인텔리제이
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |