hayu's 개발 일지

[TIL]240316 트러블 슈팅: 아이디 값 null 본문

프레임워크/spring

[TIL]240316 트러블 슈팅: 아이디 값 null

hayu00 2024. 3. 16. 21:38
  • 문제

엔티티 연관매핑 후 코드 실행했는데 테이블에 연관된 엔티티의 아이디값이 들어가지 않고 null이 나오는 문제.

  • 원인

아직 모르겠다. 엔티티 연관관계도 확인했는데 서비스 코드에서 choice에 게임 아이디 주입 코드가 필요한 것 같다.

 /*
    * 밸런스 게임 생성*/
    @Transactional
    public GameResponseDto createGame(GameRequestDto gameRequestDto, UserDetails userDetails) {

        User user = userRepository.findByEmail(userDetails.getUsername())
                .orElseThrow(()->new CustomApiException("사용자를 찾을 수 없습니다."));
        /*
        * 선택지 생성*/
        Choice choiceA = Choice.builder()
                .content(gameRequestDto.getChoiceA())
                .build();

        Choice choiceB = Choice.builder()
                .content(gameRequestDto.getChoiceB())
                .build();



        choiceRepository.save(choiceA);
        choiceRepository.save(choiceB);

        /*builder 를 사용해서 객체 생성 */
        Game game = Game.builder()
                .gameTitle(gameRequestDto.getGameTitle())
                .user(user)
                .choices(Arrays.asList(choiceA,choiceB))
                .build();


        gameRepository.save(game);

        return GameResponseDto.builder()
                .id(game.getId())
                .username(user.getUsername())
                .gameTitle(game.getGameTitle())
                .choiceA(choiceA.getContent())
                .choiceB(choiceB.getContent())
                .build();
    }
  • 해결방안

choice 객체를 생성할 때 game 의 값을 넣어줬다.

/*
    * 밸런스 게임 생성*/
    @Transactional
    public GameResponseDto createGame(GameRequestDto gameRequestDto, UserDetails userDetails) {

        User user = userRepository.findByEmail(userDetails.getUsername())
                .orElseThrow(() -> new CustomApiException("사용자를 찾을 수 없습니다."));

        /*builder 를 사용해서 객체 생성 */
        Game game = Game.builder()
                .gameTitle(gameRequestDto.getGameTitle())
                .user(user)
                .build();

        gameRepository.save(game);
        
        /*
         * 선택지 생성*/

        Choice choiceA = Choice.builder()
                .content(gameRequestDto.getChoiceA())
                .game(game)
                .build();

        Choice choiceB = Choice.builder()
                .content(gameRequestDto.getChoiceB())
                .game(game)
                .build();

        choiceRepository.save(choiceA);
        choiceRepository.save(choiceB);


        return GameResponseDto.builder()
                .id(game.getId())
                .username(user.getUsername())
                .gameTitle(game.getGameTitle())
                .choiceA(choiceA.getContent())
                .choiceB(choiceB.getContent())
                .build();
    }

'프레임워크 > spring' 카테고리의 다른 글

[TIL]240320 엔티티(Entity) 연관관계 매핑(1)  (0) 2024.03.20
[TIL]240319 Entity & DTO  (0) 2024.03.19
[TIL]240314 Swagger  (1) 2024.03.14
[TIL]240313 Builder Pattern  (0) 2024.03.13
[TIL]240312 트랜잭션(transaction)  (0) 2024.03.12