https://eclipse4j.tistory.com/215
윗 글을 참조했다. MultipleBagFetchException 이 발생했는데, 간략하게 말하자면 Eager fetch타입을 2개이상 써서 발생한 문제이다. 지금 만들고 있는 프로젝트에서 가장 많은 매핑이 되어있는 Feed 엔티티의 테스트를 해보니 정상적으로 진행된다.
신나게 fetch = FetchType.LAZY 로 도배를 하고 있었다... 하지만 아래와 같은 오류가 발생했다.
(실은 FetchType.Eager로 도배가 되있었던건 이 오류가 발생했었기 때문이다..)
두번째 오류 : org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role
https://ankonichijyou.tistory.com/entry/JPA-OneToMany-%EC%98%A4%EB%A5%98
위의 글을 참고했다. 귀신같이 한방에 해결했다. 단지 테스트 메서드에 @Transactional 어노테이션을 추가해서 트랜잭션처리 하니까 실패했던 테스트들이 모두 파란불이 떳다!!
트랜잭션 처리는 service 단에서만 사용하면 될 줄알았는데... test단에서도 사용해야할지는 상상도 못했다.
간략하게 설명하자면... 트랜잭션 처리가 안되어있으면, find하거나 save함으로써 얻은 영속성이 유지되지 않고 다른 다른 영속성을 얻거나 잃는 작업을 할 때, 기존의 것을 모두 clear(EntityManager의 함수중에 clear였나 delete 였던가..? 하여튼 현재 얻은 모든 영속성을 제거하는 함수를 의미한다) 해버리는 것 같다. 따라서 영속성을 잃었기 때문에, 지금 테스트처럼 Feed 엔티티에서 양방향 맵핑되어있는 Chat엔티티나 Likefull, Share 엔티티를 찾지 못하는 거였다.