Search

TodoServiceTest 오류

태그
JPA

TodoServiceTest - testCreateFull()

재현님이 만들어주신 테스트 코드에 값을 넣고, 내가 만든 화면단과 연결해서 데이터가 잘 뽑히나 확인해 보려했습니다. 주석을 토대로 먼저 테스트 코드를 이용해 유저를 추가해주고, 아래와 같이 fetch 도 넣어주었습니다.

Planner.java

하지만 다음과 같은 에러문구가 발생했습니다.
org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: multi.second.project.domain.todolist.domain.TodoList; nested exception is java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: multi.second.project.domain.todolist.domain.TodoList
Plain Text
복사

해결

달라진 소스코드는 아래와 같습니다.
위의 코드를 아래와 같이 바꾸면 됩니다.
이렇게 변경 하고나니 데이터가 잘 들어가있는걸 확인할 수 있었습니다.

TodoServiceTest - testAddTodolist()

재현님이 해결해주고 다음 테스트를 돌렸는데 다음과 같은 예외가 발생하였습니다.
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: multi.second.project.domain.planner.domain.Planner.todolists, could not initialize proxy - no Session
Plain Text
복사
무슨말인지 모르겠어서 디버깅을 해보았습니다.
그래도 모르겠어서 구글링을 해보았습니다.
@OneToMany 이거나 @ManyToMany 일때 종종 발생한다고 합니다. 트랜잭션 밖에서 엔티티를 조회할때 생기는 문제라 해서, 해당 테스트코드 위에 @Transactional 을 붙여주었습니다. 그랬더니 다행히 해결되었고, 값도 잘 들어왔습니다.