failed to lazily initialize a collection of role: com.tastyjapan.group.domain.Groups.groupRestaurantList, could not initialize proxy - no Session
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.tastyjapan.group.domain.Groups.groupRestaurantList, could not initialize proxy - no Session
at app//org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:614)
at app//org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:218)
at app//org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:591)
at app//org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:149)
at app//org.hibernate.collection.internal.PersistentBag.get(PersistentBag.java:561)
at app//com.tastyjapan.group.service.GroupServiceTest.updateGroupRestaurants(GroupServiceTest.kt:138)
...
org.hibernate.LazyInitializationException
은 Hibernate에서 발생하는 예외입니다. 이 예외는 지연 로딩(Lazy Loading)된 엔티티나 컬렉션을 초기화하지 못할 때 발생합니다.
세션(Session)이나 트랜잭션(Transaction)이 종료된 후에 지연 로딩된 엔티티나 컬렉션에 접근하려고 할 때 발생할 수 있습니다. Hibernate 세션을 통해 데이터를 로드한 후에는 해당 세션이나 트랜잭션이 활성 상태여야만 로드된 데이터에 접근할 수 있습니다.
엔티티나 컬렉션을 초기화하지 않은 상태에서 객체 그래프를 시리얼라이즈하고, 그 이후에 역직렬화하려고 할 때도 이 예외가 발생할 수 있습니다. 시리얼라이즈된 엔티티는 초기화되지 않은 상태로 저장되기 때문에, 역직렬화 후에 초기화하지 않은 엔티티나 컬렉션에 접근하면 예외가 발생합니다.
이를 해결하기 위해선 현재 지연로딩으로 되어있는 연관관계를 즉시로딩으로 변경하거나, Test 메서드에 @Transactional
어노테이션을 사용하여 트랜잭션 내에 존재하게 하면 됩니다.
서비스에서 Lazy Loading을 필요로하기 때문에 @Transactional
어노테이션을 통해 해결했습니다
https://jungguji.github.io/2021/01/22/failed-to-lazily-initialize-a-collection-of-role/
감사합니다! 이것 때문에 1시간 정도 해맸는데 덕분에 해결했습니다 ㅠㅠ 역시 JPA를 사용하려면 기본기가 다시 한번 중요하다는 걸 느꼈습니다