작성
·
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를 잘 알지 못하여 죄송합니다.)
답변