• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

일대다, 다대다 Entity 설계 관련 질문드립니다.

21.07.21 12:59 작성 조회수 350

0

안녕하세요, 선생님.

강의를 듣고 이제 첫 실전에 jpa를 사용하는데 Entity 설계 과정에 어려움이 있어서 질문드립니다.

다름이 아니라 제가 스프링 시큐리와 같이 회원과 권한의 테이블을 설계하려고 해서 조사를 해보니 

https://github.com/zidol/springsecurity_jwt_mysql/blob/main/src/main/java/co/kr/nakdong/entity/author/User.java

https://github.com/zidol/springsecurity_jwt_mysql/blob/main/src/main/java/co/kr/nakdong/entity/author/Authority.java

와 같은 구조 혹은

@ManyToMany(cascade=CascadeType.ALL)
  @JoinTable(name = "user_role",
             joinColumns = @JoinColumn(name = "user_id"),
             inverseJoinColumns = @JoinColumn(name = "role_id"))
  private Set<Role> roles;
다대다 구조를 많이 사용하더라구요..

위 코드의 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로 변환해서 반환해야 합니다.

감사합니다.

안지혁님의 프로필

안지혁

질문자

2021.07.23

 맥을 제대로 짚어주셨네요.ㅠㅠ 아직 많이 부족하네요.. 다시한번 더 봐야겠네요