티스토리 뷰

반응형
@Test
@DisplayName("데이터베이스에 존재하는 게시판을 10개 조회해온다.")
void findAll() {
    for (int i = 0; i < 10; i++) {
        Board board = Board.builder()
                .title(Title.from("테스트 용입니다. " + i))
                .content(Content.from("테스트용 Content 입니다. 재미있다아앙"))
                .build();
        boardService.create(board, 1L);
    }

    Pageable pageable = PageRequest.of(0, 10, Sort.Direction.DESC, "id");
    List<BoardAllResponse> boards = boardService.findAll(pageable);

    assertThat(boards.size()).isEqualTo(10);
}

다음 코드를 테스트 하던 와중에 이런 오류가 발생했다.

 

org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["PUBLIC.UK_AL5GSLBNVSEGVGOILE1O20QVE_INDEX_3 ON PUBLIC.BOARD(CONTENT NULLS FIRST) VALUES ( /* 2 */ U&'\\d14c\\c2a4\\d2b8\\c6a9 Content \\c785\\b2c8\\b2e4. \\c7ac\\bbf8\\c788\\b2e4\\c544\\c559' )"; SQL statement:
insert into board (board_id, create_time, last_modified_time, created_by, last_modified_by, content, member_id, title, view) values (default, ?, ?, ?, ?, ?, ?, ?, ?) [23505-200]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement

 

처음엔 무슨 오류인가 정말 난감했고 해결하기 위해 계속해서 디버깅하고 로그를 찍어봐도 잘 풀리지 않아 로그를 좀 더 세부적으로 분석해보았다.

 

(CONTENT NULLS FIRST) 라는 문구를 보고 뭔가 Board에 Content쪽에 문제가 있다 예상을 하기 시작했고 PUBLIC.UK_AL5GSLBNVSEGVGOILE1O20QVE_INDEX_3 3번째 인덱스에 존재하는 것에 UK(유니크 키)가 뭔가 문제를 일으킨다고 예상이 되어서 바로 Board Entity에 Content 컬럼을 확인해 보았다. 

그랬더니 떡하니 unique = true라는 옵션이 붙어있는 것을 확인했고, 알고보니 Content 컬럼이 유니크 키임에도 중복된 값이 들어가 발생하는 오류였던 것이었다...!

본 필자는 세부 내용까지 unique로 걸어놓는 것은 과하다 판단하여 unique 옵션을 false (default 값)로 설정하였다.

 

그랬더니 ... 

 

드디어 초록불 ... !!!! 

문제를 해결할 수 있었다 ㅠㅠㅠ 

 

다른 사람들은 삽질 하지 말기를 바라며 포스팅 한다.... 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함