failed to lazily initialize a collection of role 에러

초코칩·2023년 5월 24일
1

Error

목록 보기
2/3
post-thumbnail

에러

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)된 엔티티나 컬렉션을 초기화하지 못할 때 발생합니다.

  1. 세션(Session)이나 트랜잭션(Transaction)이 종료된 후에 지연 로딩된 엔티티나 컬렉션에 접근하려고 할 때 발생할 수 있습니다. Hibernate 세션을 통해 데이터를 로드한 후에는 해당 세션이나 트랜잭션이 활성 상태여야만 로드된 데이터에 접근할 수 있습니다.

  2. 엔티티나 컬렉션을 초기화하지 않은 상태에서 객체 그래프를 시리얼라이즈하고, 그 이후에 역직렬화하려고 할 때도 이 예외가 발생할 수 있습니다. 시리얼라이즈된 엔티티는 초기화되지 않은 상태로 저장되기 때문에, 역직렬화 후에 초기화하지 않은 엔티티나 컬렉션에 접근하면 예외가 발생합니다.

이를 해결하기 위해선 현재 지연로딩으로 되어있는 연관관계를 즉시로딩으로 변경하거나, Test 메서드에 @Transactional 어노테이션을 사용하여 트랜잭션 내에 존재하게 하면 됩니다.

서비스에서 Lazy Loading을 필요로하기 때문에 @Transactional 어노테이션을 통해 해결했습니다

결과

Ref

https://jungguji.github.io/2021/01/22/failed-to-lazily-initialize-a-collection-of-role/

profile
초코칩처럼 달콤한 코드를 짜자

2개의 댓글

comment-user-thumbnail
2024년 3월 12일

감사합니다! 이것 때문에 1시간 정도 해맸는데 덕분에 해결했습니다 ㅠㅠ 역시 JPA를 사용하려면 기본기가 다시 한번 중요하다는 걸 느꼈습니다

1개의 답글