Leta Learns

함밥 | 220826 본문

토이 프로젝트/함밥

함밥 | 220826

leta 2022. 8. 26. 19:13

#create Participant (그룹 생성 시 참가자 컬럼 생성)

createGroup함수 만든 방식과 같이 하고 있다.

 

 

다 작성하고 빌드하는데 아래와 같은 에러가 났다.

Bean annotation 잊지 말자!

 

 

 

 

 

#ParicipantServiceImpl

에서 createParticipant 함수를 아래와 같이 작성하고,

@Override
    public Optional<Participant> createParticipant(Long groupId) {

        Participant participant = new Participant();
        participant.setId(groupId);
        System.out.println("완");
        return participantDAO.create(participant);
    }

 

#GroupServiceImpl

에서 그룹을 만든 후에 createParticipant 함수를 호출하였다. (자세한 코드는 깃헙에..)

@Override
    public Optional<Group> createGroup(Long restaurantId, Long leaderId) {

        Group group = new Group();
        group.setName("");
        group.setDate("1970-01-01");
        group.setTime("");
        group.setSex('F');
        group.setAge("");
        group.setPersonnel(1);
        group.setOptional("");
        group.setLeader(leaderId);
        group.setRestaurantId(restaurantId);

        ParticipantService participantService = new ParticipantServiceImpl(participantDAO);
        participantService.createParticipant(group.getId());
        System.out.println("participantService = " + participantService);


        return groupDAO.create(group);
    }

 

 

포스트맨에서 api 써서 돌리면 

이런 에러가 난다.

 

 

java.sql.SQLIntegrityConstraintViolationException: (conn=2223050) Cannot add or update a child row: a foreign key constraint fails (`dtmudywqqttg3fc3`.`Participant`, CONSTRAINT `Participant_FK` FOREIGN KEY (`id`) REFERENCES `Group` (`id`) ON DELETE CASCADE)

 

=> 참조 테이블에 없는 값을 추가해서 발생한 오류라고 한다.

참조 무결성에 의해서 부모키에 해당하는 값만을 넣을 수 있다.

 

groupId를 participant 컬럼에 넣어주어야 하는데 이 과정에서 문제가 생긴 것 같다.

https://reeme.tistory.com/39

 

[SQL/Error] (1452): Cannot add or update a child row: a foreign key constraint fails

(1452): Cannot add or update a child row: a foreign key constraint fails 참조테이블에 없는 값을 추가해서 발생한 오류 참조 무결성에 따라서 부모키에 해당하는 값만 넣을 수 있음. 참조하는..

reeme.tistory.com

 

 

 

해결!

 

ParticipantService 선언을 createGroup 함수 내부에서 해서 그런 것이었다.

밖으로 빼주었더니 제대로 실행되어 그룹이 만들어지면 참가자까지 만들어진다.

@Service
public class GroupServiceImpl implements GroupService {

    private final GroupDAO groupDAO;
    private final ParticipantDAO participantDAO;
    private final ParticipantService participantService; //이렇게 함수 밖에서 선언


    @Autowired
    public GroupServiceImpl(GroupDAO groupDAO, ParticipantDAO participantDAO, ParticipantService participantService) {
        this.groupDAO = groupDAO;
        this.participantDAO = participantDAO;
        this.participantService = participantService;
    }

    ///////////////생략////////////////
    
    @Override
    public Optional<Group> createGroup(Long restaurantId, Long leaderId) {

        Group group = new Group();
        group.setName("");
        group.setDate("1970-01-01");
        group.setTime("");
        group.setSex('F');
        group.setAge("");
        group.setPersonnel(1);
        group.setOptional("");
        group.setLeader(leaderId);
        group.setRestaurantId(restaurantId);

        participantService.createParticipant(group.getId());
        System.out.println("participantService = " + participantService);


        return groupDAO.create(group);
    }
  }

 

 

 


 

#그룹 참여

 

그룹 참여 로직

  1. 사용자가 그룹 참여 버튼 클릭
  2. DB에서 해당 그룹의 참가자 컬럼을 찾아 빈 공간 탐색 (sql 쿼리 사용)
  3. 찾은 빈 공간에 사용자 추가

 

음 .. 함수를 만들다가 쿼리를 가져오는 작업에서 혼란스러워졌다..

어떤 식으로 출력되는지 확인하기 위해서 일단 실행을 해봤는데

 

java.lang.NullPointerException: null 에러가 났다.

 

오늘은 여기까지 하고,, 내일 다시 해야지.

'토이 프로젝트 > 함밥' 카테고리의 다른 글

함밥 | 220825  (0) 2022.08.25
함밥 | 220818  (0) 2022.08.18
함밥 | 220813  (0) 2022.08.13
함밥 | 220812  (0) 2022.08.12
Comments