728x90
문제
org.hibernate.LazyInitializationException: could not initialize proxy [com.zb.deuggeun.programschedule.entity.ProgramTimeSlot#2] - no Session
org.hibernate.LazyInitializationException은 Hibernate이 지연로딩된 엔티티를 초기화할 때 발생하는 예외다.
일반적으로 Hibernate 세션이 종료된 후에 지연로딩된 엔티티를 사용하려고 할 때 발생한다.
해결하기
Hibernate 세션 유지
지연로딩된 엔티티를 사용하는 동안 Hibernate 세션을 열어두는 것이 가장 간단한 방법이다.
이렇게 하려면 트랜잭션 범위에서 세션을 열고, 트랜잭션이 끝나기 전에 세션을 닫으면 된다.
Spring에서는 @Transactional 애노테이션을 사용하여 트랜잭션을 정의할 수 있다.
Dto를 사용해서 필요한 값만 사용하기
엔티티가 필요한 정보만을 포함하는 DTO(Data Transfer Object)를 사용하여 데이터를 가져오는 것이 좋다.
DTO를 사용하면 지연로딩이 발생하지 않으며, 성능과 유지보수 측면에서 유리할 수 있다.
728x90
'spring > spring jpa' 카테고리의 다른 글
| [JPA] 대댓글 구현 (페이징 + join 카운팅 / JPQL / Pageable, LIMIT OFFSET 실행 비교) (0) | 2024.07.13 |
|---|---|
| [JPA] @MapsId로 FK를 PK로 설정하기 (0) | 2024.04.01 |
| [JPA][스프링 부트 핵심 가이드] 연관관계 매핑과 영속성 전이 (0) | 2024.02.19 |
| [JPA] JPQL,쿼리메서드, QueryDSL, JPA Auditing - [스프링 부트 핵심 가이드] (0) | 2024.02.15 |
| [JPA][스프링 부트 핵심 가이드] 리포지토리 메서드 생성 규칙 (0) | 2024.02.08 |