인프런 커뮤니티 질문&답변

shake_sphere님의 프로필 이미지
shake_sphere

작성한 질문수

스프링 시큐리티

SecurityResourceService 에서 JPA proxy 관련 질문이 있습니다!

작성

·

215

0

안녕하세요 강사님! 좋은 퀄리티의 Security 강의 제공해주셔서 감사드립니다.

[실전프로젝트 - 인가 프로세스 DB 연동 웹 계층 구현]
5) 웹 기반 인가처리 DB 연동 - FilterInvocationSecurityMetadataSource (2)

수강하면서 생겼던 질문이 있습니다.

// val resourcesList = resourcesRepository.findAllResources()
val resourcesList = resourcesRepository.findAll()

강사님께서 미리 만들어두셨던 findAllResources 메소드를 통한 JPQL로 fetch하지 않고 Spring DataJPA 기본 findAll 메소드로 resources 리스트 가져와서 Role의 roleName을 LinkedHashMap에 넣었습니다.

(해당 서비스 클래스의 getResourceList 메소드에는 @Transactional 걸어둔 상태입니다.)

그렇게 하니까 다음과 같은 에러가 발생했었습니다.

failed to lazily initialize a collection of role: 
io.beaniejoy.coresecurity.domain.entity.Resources.roleSet, 
could not initialize proxy - no Session

Resources 엔티티에 @ManyToMany로 roleSet에 fetch 모드를 LAZY로 걸어둔 상태여서 저는 lazy한 방식으로 proxy를 통해 role.getRoleName() 할 때 role_resources, role 두 테이블로 조회쿼리 날라가면서 잘 가져올 것이라 생각했었는데요. 왜 proxy를 initialize 하지 못했는지, resources를 findAll할 때 결국 fetch join으로 가져올 수 밖에 없는 것인지 궁금했습니다.

(제가 JPA를 잘 알지 못하여 죄송합니다.)

답변

답변을 기다리고 있는 질문이에요
첫번째 답변을 남겨보세요!
shake_sphere님의 프로필 이미지
shake_sphere

작성한 질문수

질문하기