작성
·
462
0
안녕하세요, 선생님.
강의를 듣고 이제 첫 실전에 jpa를 사용하는데 Entity 설계 과정에 어려움이 있어서 질문드립니다.
다름이 아니라 제가 스프링 시큐리와 같이 회원과 권한의 테이블을 설계하려고 해서 조사를 해보니
와 같은 구조 혹은
위 코드의 User 와 Authority는 일대다 구조인데
강의때 배울때 연관관계 주인 설정이나 fetch 타입 설정이 다르고 일대다는 권장 하지 않으셔서 조금 혼동이 오더라구요.. 지
양하라는 말씀을 그대로 쓰는코드들도 꽤 있더라구요. 그래서 최대한 강의때 배운데로 해보려고 아래 스샷처럼 변경 해보았습니다.
위 ERD 이미지 처럼 Entity를 변경해보았습니다.(테이블명은 작업중이라 안맞습니다.)
로그인 시 User객체를 조회 하여 불러오는데
test 코드에서 UserRepository를 통해서 User를 불러오면 데이터를 잘 조회 합니다.
제가 로그인을 UsernamePasswordAuthenticationFilter를 상속받아 attemptAuthentication메소드를 재구현했는데
리턴하는 부분에서 could not initialize proxy - no Session 에러가발생하네요..
@SneakyThrows
@Override
public Authentication attemptAuthentication(
HttpServletRequest request,
HttpServletResponse response) throws AuthenticationException
{
UserLoginDto userLogin = objectMapper.readValue(request.getInputStream(), UserLoginDto.class);
String requestURI = request.getRequestURI();
if(userLogin.getRefreshToken() == null) {
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
userLogin.getUsername(), userLogin.getPassword(), null
);
// 에러 발생부분
return authenticationManager.authenticate(token);
}
제가 뭘 잘못하고 있는지, 어떤걸 참고해야 하는지 알려주시면 알될까요??
감사합니다. 좋은 하루되세요
답변 1
1
안녕하세요. 안지혁님
지연로딩은 트랜잭션 범위 안에서만 가능합니다.
could not initialize proxy - no Session 오류는 트랜잭션 범위 밖에서 지연로딩된 엔티티를 초기화하려고 해서 발생하는 문제입니다.
활용2에서 학습하신 것 처럼 fetch join을 사용하거나 트랜잭션 안에서 DTO로 변환해서 반환해야 합니다.
감사합니다.
맥을 제대로 짚어주셨네요.ㅠㅠ 아직 많이 부족하네요.. 다시한번 더 봐야겠네요