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 을 붙여주었습니다. 그랬더니 다행히 해결되었고, 값도 잘 들어왔습니다.