1. 오류 상황
- MemberRepository에 대한 slice 테스트 도중 Unique index or primary key violation가 발생했다.
2023-06-08 21:04:40.757 WARN 26920 --- [ Test worker] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 23505, SQLState: 23505
2023-06-08 21:04:40.757 ERROR 26920 --- [ Test worker] o.h.engine.jdbc.spi.SqlExceptionHelper : Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.MEMBER(MEMBER_ID) ( /* key:1 */ CAST(1 AS BIGINT), TIMESTAMP '2023-05-28 04:40:08.805207', TIMESTAMP '2023-05-28 04:40:08.805207', 'sdfsdf@naver.com', '{noop}123456789')"; SQL statement:
insert into member (member_id, created_at, last_modified_at, email, password) values (default, ?, ?, ?, ?) [23505-214]
- 이전 테스트코드 때문에 data.sql에 member를 insert한 게 있었는데, 거기서 생성된 member의 id와 테스트코드 내에서 생성한 member의 id가 충돌한 게 아닐까 싶다.
insert into member(member_id, created_at, last_modified_at, email, password) values('1', '2023-05-28 04:40:08.805207', '2023-05-28 04:40:08.805207', 'sdfsdf@naver.com', '{noop}123456789');
2. 오류 해결
- 원인은 data.sql에서 id값을 수동으로 넣어줬기 때문이다.
- H2 DB의 id값 자동 증가 로직을 사용하려면 default 키워드를 넣어줘야 한다.
insert into member(member_id, created_at, last_modified_at, email, password) values(default, '2023-05-28 04:40:08.805207', '2023-05-28 04:40:08.805207', 'sdfsdf@naver.com', '{noop}123456789');
- 아예 id 필드에 값을 입력하지 않아도 동일하게 동작한다.