Framework/Spring

Spring Boot Swagger 연동 에러 해결하기

MINGYUM 2021. 10. 3. 03:17

Item 클래스의 도메인부터 서비스, Test 코드까지 작성 후 Swagger와 연동하여 Request를 요청해보았다.

 

처음으로 뜬 에러는 ItemPhoto에 대한 flushing문제

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : springstudy.spring.domain.ItemPhoto.item -> springstudy.spring.domain.Item; nested exception is java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : springstudy.spring.domain.ItemPhoto.item -> springstudy.spring.domain.Item] with root cause

<에러 메세지>

ItemPhoto 클래스와 Item간의 양방향 매핑에서 DB에 객체를 flush하는 과정에서 문제가 생겼다.

윗 부분을 주석처리 해주고, cascade = CascadeType.ALL을 추가해주어서 해결!

 

+ cascade란? 

https://minkukjo.github.io/framework/2020/04/28/Spring-107/

 

Spring Data JPA - Cascade

Spring Data JPA

minkukjo.github.io

연관 관계인 아이들 중 Parent에 속하는 아이가 삭제되었을 때 모든 상태를 반영시키기 위해 ALL을 사용한다. 

 

 

2. CategoryItem에 '1'이라는 id값에 대한 중복된 행이 존재함을 알려주었다. 

 Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: More than one row with the given identifier was found: 1, for class: springstudy.spring.domain.CategoryItem; nested exception is org.hibernate.HibernateException: More than one row with the given identifier was found: 1, for class: springstudy.spring.domain.CategoryItem] with root cause

엥 근데 중복 안되는데..?

 

이건 내 코드 상에서 양방향 매핑을 잘못 해주어서 발생한 에러이다. 

Item : CategoryItem = 1 : 1 매핑이었고, 연관관계의 주인은 CategoryItem이었는데 JoinColumn을 엉뚱한 데다 해놓은 것이 원인이었다. 

매핑 구조 싹 고치고 나서 해결!

Item.class
CategoryItem.class