본문 바로가기
관리자

Programming-[Backend]/JPA

[링크] could not initialize proxy - no Session

728x90
반응형

 

 

Service 레이어에서 Entity를 가져올 때 발생할 수 있다. Entity에 접근해서 JPA의 Fetch 설정이 LazyLoading(주로 1:N으로 연결된 필드) 설정인 경우 서비스 레이어 -> 컨트롤러 레이어에서 프록시 객체를 넘겨서 발생할 수 있다.

 

아래 참조 글에 따르면 이것은 프록시 객체를 가져오는 것도 트랜잭션 단위로 이루어지기 때문이다. 서비스 레이어에서는 StudentDto내에 School 엔티티를 프록시로 들고 있어도 되지만, 그대로 서비스 레이어를 끝내고 다른 레이어로 넘어가면 세션이 끝나버려서 프록시로 들고 있던 School 엔티티의 값을 참조하지 못하게 된다.

 

서비스 레이어에서 모든 프록시 객체들을 개별 DTO로 변환하는 것이 추천된다. Eager 로딩할 수도 있겠으나 N+1 문제가 발생할 수 있다.

 

참조 글

https://cantcoding.tistory.com/78

 

JPA/ could not initialize proxy - no Session

1.문제점 JPA를 통한 개발을 하다보면 한번쯤 만날 수 밖에없는 에러이다. JPA를 사용하여 DB에 저장된 리소스를 불러와서 반환하는 경우, 혹은 사용할 때 발생했던 에러이다. 2.접근 JPA에 대한 이

cantcoding.tistory.com

 

 

728x90
반응형