반응형
ServiceTest에서 테스트 코드를 작성한 뒤 실행하였는데, 아래와 같은 오류가 발생하였다.
더보기
org.springframework.orm.jpa.JpaSystemException: ids for this class must be manually assigned before calling save()
소스 코드
Entity
- Primary Key 매핑 방식을, 직접 할당을 사용
@Getter
@NoArgsConstructor
@Entity
@EntityListeners(AuditingEntityListener.class)
@Table(name = "chat_room")
public class Room {
@Id
@Column(name = "room_id", unique = true, nullable = false, length = 255)
private String roomId;
// ...
Service
public int createRoom(RoomDto roomDto) {
// Dto -> Entity
Room room = roomDto.toRoom();
// save db
try {
roomRepository.save(room);
} catch (Exception e) {
log.error("e ", e);
return HttpStatus.INTERNAL_SERVER_ERROR.value();
}
return HttpStatus.CREATED.value();
}
ServiceTest
- 아래 코드를 실행하였을 때, 오류 발생함
@Test
@DisplayName("방 생성이 정상적으로 완료되면, status 201 값이 리턴된다.")
void createRoom() {
RoomDto roomDto = new RoomDto("testroom1", "testmentee1", "testmentor1");
int success = roomService.createRoom(roomDto);
assertThat(success).isEqualTo(HttpStatus.CREATED.value());
}
해결 방법
Service 코드에 아래 한 줄을 추가함
public int createRoom(RoomDto roomDto) {
// Dto -> Entity
Room room = roomDto.toRoom();
// save db
try {
room.setRoomId(roomDto.getRoomId()); // Assign a value to the ID field manually
roomRepository.save(room);
} catch (Exception e) {
log.error("e ", e);
return HttpStatus.INTERNAL_SERVER_ERROR.value();
}
return HttpStatus.CREATED.value();
}
참고 링크
- 4.6 기본 키 매핑 https://ultrakain.gitbooks.io/jpa/content/chapter4/chapter4.6.html
- [오류]IdentifierGenerationException https://velog.io/@tool0923/오류IdentifierGenerationException
- 테스트
반응형
'Spring Boot' 카테고리의 다른 글
Spring Boot] ResponseEntity vs Custom DTO (0) | 2023.07.15 |
---|---|
Spring Boot] 채팅 시스템 설계 (0) | 2023.07.11 |
Spring Boot] java.lang.IllegalArgumentException: Key argument cannot be null (0) | 2023.07.08 |
Spring Boot] NCP Chatbot과 연동하기-기초 (0) | 2023.07.06 |
Spring Boot] JWT 토큰을 사용한 사용자 인증/인가 (0) | 2023.07.03 |