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/
연관 관계인 아이들 중 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을 엉뚱한 데다 해놓은 것이 원인이었다.
매핑 구조 싹 고치고 나서 해결!