2023. 11. 3. 23:35ㆍ팀프로젝트일기/SKKUNION
오류 해결 1
AccessToken에서 UserEmail 정보를 가지고 올 수 있는데 그거로 Users를 받아오고 userTag 목록으로 가져오는 걸 findByUserEmail 같은 방식으로 가져와버리시면 문제가 userTag를 가져오고 싶을 때에 문제가 일어나요. 오류가 아마 LazyInitializationException이라고 뜨면서 에러가 날텐데 아마 동아리 정보에서 UnionTag 가져올 때도 싹 다 LAZY로 지금 우선 해둬서 똑같은 문제가 일어날 수 있거든요??
public ResponseEntity<?> getUserInfomation(String AccessToken){
// 1. Access Token 에서 User email 을 가져옵니다.
Authentication authentication = jwtTokenProvider.getAuthentication(AccessToken);
// 2. fetch join 단일 user join 해오는 거는 좀 있다가 할게요 일단은 LAZY로 만듭니다.
final Users users = loginRepository.findUserWithUserTagsByUserEmail(authentication.getName());
if(users == null || !jwtTokenProvider.validateToken(AccessToken))
return response.fail("유효하지 않은 AccessToken입니다", HttpStatus.BAD_REQUEST);
// 화면용 정보 중 enum 타입들 string 변환
String userGender = users.getUserGender().toString();
String userSchool = users.getUserSchool().toString();
// Tag들 string 목록으로 변환
List<String> userTags = new ArrayList<>();
List<UserTag> userTagList = users.getUserTags();
for(int i = 0; i < userTagList.size() ; i++){
userTags.add(userTagList.get(i).getUserTag().toString());
}
그래서 제가 드리는 솔루션은 UNION이 복잡하지 않으면 어차피 성능 신경 안써도 되니까 EAGER로 해도 되는데 문제는 UNION에 연결된 Table이 한 개가 아니면 Aplication 작동과정에서 문제가 생겨요. 그러니까 Fetch join을 어쩔 수 없이 써야됩니다.
제일 쉬운 방법은 저희 Entity 코드를 gpt에 복붙해서 User를 조회할 때 UserTag까지 fetch join으로 가져오는 방법 알려줘. 이런 식으로 물어보시면 바로 답을 알려줍니다. @Query로 해서 직접 쿼리를 작성해도 되는데 제 생각에는 @EntityGraph(attributePaths = "userTags") 이게 더 편할 것 같아서 둘 다 공유를 하겠습니다!
@Repository
public interface LoginRepository extends JpaRepository<Users, Long> {
@Query("SELECT u FROM Users u JOIN FETCH u.userTags WHERE u.userEmail = :userEmail")
Users findUserWithUserTags(@Param("userEmail") String userEmail);
@EntityGraph(attributePaths = "userTags")
Users findUserWithUserTagsByUserEmail(String userEmail);
}
오류 해결 2
코드를 github에서 병합하고 나서 다시 코드를 돌려보는데 오류가 생기는 데... 아 변수명 바꿨으면 Readme에 변수 바꾼 걸 설명을 해야 할 것 같습니다. 원래 이름이랑 다르게 바뀌어 있어서 Dto에서 null로 감지되니까 에러는 안나는데 계속 코드가 안 돌아가서 타입이나 변수명 바뀐 것에 대해서는 기록을 해놨다가 Readme에 작성해주셨으면 좋겠습니다.
문제 찾느라고 2시간 넘게 걸렸어요.
'팀프로젝트일기 > SKKUNION' 카테고리의 다른 글
SKKUNION - SpringSecurity 설명 2 (0) | 2023.11.05 |
---|---|
SKKUNION - SpringSecurity 설명 1 (0) | 2023.11.03 |
SKKUNION - 데이터를 한 번 뽑아보자! (2) | 2023.10.08 |
SKKUNION - Autowired, Component 설정 (0) | 2023.09.30 |
SKKUNION - 일반 프로젝트 생성 시 작동이 안되는 이유 (0) | 2023.09.30 |