• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

22.11.13 18:57 작성 조회수 168

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

답변 0

답변을 작성해보세요.

답변을 기다리고 있는 질문이에요.
첫번째 답변을 남겨보세요!