cascade = CascadeType.ALL 를 사용할때 주의해야 할점

쪼경·2022년 1월 3일
0

이번에 이틀을 이상하게 삽질한 이야기를 풀어보려한다...


프로젝트를 진행하다가 만난 에러 코드

object references an unsaved transient instance - save the transient instance before flushing

에러를 해결하기위해 검색해보니,

@OneToMany나 @ManyToMany일때 흔히 만나는 에러 이며,
부모 객체에 추가하는 자식 객체가 아직 DB에 저장되지 않아 발생하는 에러 라고 한다.

영속성 전이를 해야하기 때문에

해결 방법은

부모 객체에 cascade 옵션을 추가하면 된다고 한다.
그래서 부모 객체에
cascade = CascadeType.ALL
를 추가해줬다.

아 이젠 되겠징ㅎㅎ 구글 선생님과 함께하니 에러 껌이네ㅎㅎㅎ

했는데...

마주하게 된 또 다른 에러

org.hibernate.PersistentObjectException: detached entity passed to persist

이 에러가 뭔지 찾아보니..

cascade = CascadeType.ALL

이 코드때문에 오는 에러이니 제거해주면 된다고 한다
WHAT?

그래서 다시 지우면 위에 에러가 다시 넣으면 아래 에러가 나오는 이상한 현상을 발견했다.


어떻게 해야하나 고민을 하다가 진짜 삽질에삽질에삽질을 했는데,

결국은 영속성 문제가 아니라 내가 코드를 잘못친거였다.


다시 처음 마음가짐으로 시작하자 싶어서
cascade = CascadeType.ALL
는 지우고 DTO로 넘겨받을때 일부가 null이여도 값을 넘겨받을 수 있게 null처리를 해주었더니 오류가 발생하지 않았다.


너무 간단하고 내 부주의를 이건 내가 낸 에러가 아니야 라고 생각하니 이꼴이 났다.
에러가 났을때 왜 났는지 냅다 구글에 검색해보는게 아니라, 차근차근 다시 뜯어보게 되는 계기가 되었다

정신 차리자!!

profile
[개발자] Lv.1

0개의 댓글