도서 등록 후 해당 등록된 도서 수정 후 요청을 할때 Error Return

문제 원인
isbn13
으로 도서 조회 시 도서가 정상적으로 조회되지 않거나 입력 값 잘못 전달 가능성
1. isbn13 확인
AdminController
에서@PathVariable
로 전달되는isbn13
값이 Book_tb의isbn13
값과 일치해야 조회 가능
- 즉 해당값이 db의 isbn13 값과 일치하지 않아서 해당 Error Msg가 반환 됐을 수 있음
- Controller의 해당 매핑부분에 로그 추가
@PutMapping("/api/admins/{isbn13}/update")
public ResponseEntity<?> updateBook(@PathVariable String isbn13, @RequestBody BookRequest.UpdateDTO updateDTO) {
System.out.println("Received ISBN13: " + isbn13); // isbn13 값 확인
BookResponse.BookDetailDTO updateBook = bookService.도서업데이트(isbn13, updateDTO);
return ResponseEntity.ok(Resp.ok(updateBook));
}

→ 정상적으로 출력됨
2. BookRepository
에서 isbn13
조회 문제
- 현재
BookRespository
에서findById
메소드 사용중
- 이 메소드는 기본적으로 Long 타입의 ID로 조회되는 것이 기본적이므로
String
타입의isbn13
을 사용할 때 문제가 될 수 있음
- BookService 수정 (findById → findByIsbn13)
// 도서 수정
public BookResponse.BookDetailDTO 도서업데이트(String isbn13, BookRequest.UpdateDTO dto) {
Book book = bookRepository.findByIsbn13(isbn13)
.orElseThrow(() -> new ExceptionApi400("도서를 찾을 수 없습니다.")); // findByIsbn13 사용
// 카테고리 조회
Category category = categoryRepository.findById(dto.getCategoryId())
.orElseThrow(() -> new ExceptionApi400("카테고리를 찾을 수 없습니다."));
// 도서 정보 업데이트
book.update(dto, category);
bookRepository.save(book);
return new BookResponse.BookDetailDTO(book);
}
- BookRepository 확인
// 카테고리 조회
Category category = categoryRepository.findById(dto.getCategoryId())
.orElseThrow(() -> new ExceptionApi400("카테고리를 찾을 수 없습니다."));
→ 이렇게 해도 여전히 update 요청 시 도서를 못 찾음.
그래서 혹시 등록이 잘 된 건가 싶어서 해당 isbn13으로 조회를 해보니..

아예 등록조차 안된것.
해결
- BookService에서 해당 등록과 수정 로직 상단에
@Transactional
등록하니 해결…
- Transaction 부분을 다시 제대로 짚어야 겠다.
Share article