티스토리 뷰
@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
- 면접준비
- MySQL
- 코드
- thread
- 프로그래밍
- Redis
- 동시성
- Kotlin
- 취업준비
- 개발
- 프로젝트
- 취준
- 게시판
- 면접 준비
- DevOps
- JPA
- docker
- 면접
- CS
- swarm
- 백엔드
- IT
- 개발자
- java
- 코딩
- 취업
- DB
- 인터뷰
- Spring
- 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |