inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

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

545

안지혁

작성한 질문수 17

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);
}

제가 뭘 잘못하고 있는지, 어떤걸 참고해야 하는지 알려주시면 알될까요??

감사합니다. 좋은 하루되세요

권한 java entity 일대다 JPA 다대다

답변 1

1

김영한

안녕하세요. 안지혁님

지연로딩은 트랜잭션 범위 안에서만 가능합니다.

could not initialize proxy - no Session 오류는 트랜잭션 범위 밖에서 지연로딩된 엔티티를 초기화하려고 해서 발생하는 문제입니다.

활용2에서 학습하신 것 처럼 fetch join을 사용하거나 트랜잭션 안에서 DTO로 변환해서 반환해야 합니다.

감사합니다.

0

안지혁

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

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

22

2

inheritance startegy 선택시 고려사항

0

21

1

Entity 동등성 비교

0

18

1

실무 조언 관련 질문입니다.

0

44

1

H2데이터베이스 파일 생성

0

56

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

52

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

51

1

JPQL 메소드와 락

0

55

1

Delivery @OneToOne

0

60

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

92

2

UnsupportedOperationException 발생

0

86

3

H2 Database 연결이 안됩니다.

0

92

2

연관관계 매핑 질문드립니다.

0

85

2

h2데이터베이스 실행오류

0

107

2

persistence.xml

0

106

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

80

1

영속성 컨텍스트

0

65

1

JPA 프록시

0

94

1

Native Query와 MyBatis

0

68

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

85

1

임베디드 타입 예시 코드 관련 질문

0

114

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

94

3

인텔리제이 패키지 커서 단축키 질문

0

108

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

143

1