org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity

2024. 1. 10. 22:21· 에러일기
목차
  1. 문제점
  2. 원인
  3. 해결
  4. 느낀점

 

문제점

org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException
 
문제 발생 코드

  @DeleteMapping("/{commentNumber}/deleteComment")
  public ApiResponse<Void> deleteComment(@PathVariable int commentNumber) {
    commentService.deleteComment(commentNumber);
    return ApiResponse.of(HttpStatus.NO_CONTENT, null);
  }

 

  • 무결성 제약 조건 위배 발생했다는 에러가 떴다.
  • 댓글 엔티티에 boardNumber 즉 fk로 엮여 있다.
  • 댓글을 삭제하려고 하니 부모인 board 엔티티에서 자식인 comment가 없어지려고 하자. 에러가 발생했다.

 

원인

  • JPA에 설정에 대해 잘 모르고 썼었던 코드가 문제였다. CASCADE 설정
  • 상식적으로 Comment만 BoardNumber를 알고 있는데 코드도 그렇고 (단방향) 
  • 어떻게 댓글을 삭제하려고 하는데 저 무결성 위배 조건이 떴을까? 고민을 해보다가
  • 보통은 무결성 위배 조건이 뜨는 상황은 게시글을 삭제했을 때 댓글에 있는 fk가 남게 되어서 연결이 끊어진 fk 때문에 문제가 발생하고는 한다.
  • 내가 게시글이 삭제될 때 댓글도 다 삭제되는 조건으로 CASCADE 옵션을 준 적이 있었는데?..
public class Comment {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private int commentNumber;

  @ManyToOne(fetch = LAZY, cascade = CascadeType.REMOVE)
  @JoinColumn(name = "boardNumber")
  private Board board;
}
  • 이게 문제였다. CascadeType.REMOVE로 설정해둔것 때문에 저 문제가 발생한 점을 확인했다.

 

해결

  @ManyToOne(fetch = LAZY)
  @JoinColumn(name = "boardNumber")
  private Board board;
  • 그리고 게시글 삭제될 때 댓글도 삭제하게 하려면 Board Entity에 양방향으로 List<Comment>이렇게 설정한다음
  • cascadeType.Remove 나,OrphanRemoval=true설정을 해줘야할 것 같다.
  • 둘의 차이는 나중에 정리할 예정..
  • ORM이 설정은 손쉽게 쓸 수 있는데, 잘못된 설정을 하게 되면 이런 예상치 못한 에러에 당황하곤 한다. 

 
 

느낀점

  • 실무를 하다보면, 이런 기술 도입하면 안될까? 라는 생각이 든다.
  • 근데 중요한건 어떤 기술이 단순하게 최신이다. 이런 것은 의미가 없고
  • 도입하려는 사람이 얼마나 기술에 대한 이해도가 있는지. 실무에 적용했을 때 문제점이 생기지 않을 것인지
  • 도입했을 때 이점이 얼마나 될지에 대한 고민이 필수인 것 같다.

'에러일기' 카테고리의 다른 글

ngrinder Cookie return 401 Error  (0) 2024.02.17
java.lang.IllegalArgumentException: Unable to serialize claims object to json: Unable to serialize object: Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310"  (0) 2024.01.13
java.lang.IllegalArgumentException: urlTemplate not found. If you are using MockMvc did you use RestDocumentationRequestBuilders to build the request?  (1) 2023.12.31
java.lang.NullPointerException: Cannot invoke - 단위테스트로 스프링 시큐리티 @AuthenticationPrincipal을 테스트 해보다가 실패했다.  (0) 2023.12.31
jakarta.servlet.ServletException: Request processing failed: java.lang.NullPointerException: Cannot invoke - @AuthenticationPrincipal 테스트 코드 작성 시 에러  (0) 2023.12.31
  1. 문제점
  2. 원인
  3. 해결
  4. 느낀점
'에러일기' 카테고리의 다른 글
  • ngrinder Cookie return 401 Error
  • java.lang.IllegalArgumentException: Unable to serialize claims object to json: Unable to serialize object: Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310"
  • java.lang.IllegalArgumentException: urlTemplate not found. If you are using MockMvc did you use RestDocumentationRequestBuilders to build the request?
  • java.lang.NullPointerException: Cannot invoke - 단위테스트로 스프링 시큐리티 @AuthenticationPrincipal을 테스트 해보다가 실패했다.
솜사탕코튼
솜사탕코튼
솜사탕코튼
개발일기
솜사탕코튼
전체
오늘
어제
  • 분류 전체보기 (236)
    • Spring관련 기술 (43)
      • Spring (2)
      • 서버개발 (10)
      • JPA (9)
      • 테스트코드 (22)
      • 인증, 인가 (0)
    • DB관련 (19)
      • 오라클 (1)
      • MySQL (0)
      • 기타 DB (4)
      • DB관련 이슈 (2)
      • REDIS (11)
      • db migration (1)
    • 프로그래밍 언어 (3)
      • 자바 (3)
    • 파이썬 관련 (19)
      • 파이썬 (16)
      • 데이터 사이언스 (3)
    • 네트워크 관련 (4)
      • 네트워크 (4)
    • 배포관련 (32)
      • AWS (26)
      • 도커 (5)
      • 클라우드 정리 (1)
    • 자료구조 & 알고리즘 관련 (53)
      • 자료구조&알고리즘 (6)
      • 코딩테스트 (40)
      • 99클럽 코딩테스트 스터디 6기 (7)
    • CS지식들 (30)
      • 공부공부 (13)
      • CS (17)
    • 프로젝트 (4)
    • 에러일기 (18)
    • 서적 (3)
      • 밑바닥부터 만드는 컴퓨팅 시스템 (3)
    • 깃 & 깃헙 (1)
    • 디자인패턴 (4)
    • 면접질문 (0)
    • kt-aivle (0)
    • 덕질일지 (2)
    • 영어공부 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 99클럽
  • 인프런
  • 스프링 부트 - 핵심 원리와 활용
  • 코테
  • AWS
  • dfs
  • 10주 완성 알고리즘 코딩테스트
  • BFS
  • Practical Testing: 실용적인 테스트 가이드
  • 프로그래머스
  • 따라하며 배우는 AWS
  • 이것이 코딩테스트다
  • 따라하며 배우는 AWS 네트워크 입문
  • 자바
  • 파이썬
  • 나동빈
  • queryDSL
  • 백준
  • 그래프순회
  • Redis

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
솜사탕코튼
org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.