개발자

숙소등록시 숙소테이블,객실정보테이블 을 동시에 넣어서 외래키 null값 오류

2024년 02월 20일조회 171

완전신입입니다.. 몇일를찾아보고 해도 제가 로직을 잘못짠건지 모르겠어서 질문을 남깁니다 숙소등록을 구현중인데 숙소테이블accommodation, 객실정보테이블room_info 두개를 나눴고 객실정보테이블에 aid(숙소테이블 기본키) 외래키로 설정을 했습니다 그리고 마이바티스에 각 테이블별로 insert로 넣었고 MySql 자동키 부분 설정도하였습니다. 서비스단을 각 두개의 클래스를 묶고 roominfo에 aid를 받아서 저장하는 로직으로 넣었습니다 그리고 컨트롤단에서 PostMapping으로 두개를묶은 클래스를 파라미터로 넣었습니다 ㅠㅠ 여기서 궁금한게 1. 테이블을 나눠서 한번에 저장할 때 다른분들은 어떻게 처리하는지 궁금합니다. 2. 숙소등록을 입력할때 필드값이 동시에 진행되는부분이라 객실테이블에 지정된 외래키aid 가 아직 없으니까 null값으로 들어가서 자꾸 aid를 찾을수없다는오류가 나오는데 이 부분을 어떤식으로 처리해야하는지 키워드를 말씀해주시면 감사하겠습니다...

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

조용구님의 프로필 사진

안녕하세요 :) 스프링 부트로는 구현해 본 적은 없으나 대략 알고 있는 부분이 있어서 답변드려봅니다. 제 생각에는 숙소 테이블에 숙소 INSERT 후에 ID를 반환받아서 객실 테이블에 숙소 ID를 외래 키를 사용하면 될 것 같아요. 즉, 숙소와 객실이 동시에 생성되지 않고, 숙소 생성 후 객실이 생성되도록 애플리케이션 레벨에서 처리가 필요할 것 같아요.

Angela님의 프로필 사진

Angela

작성자

백엔드 개발자2024년 02월 20일

답변감사합니다! 숙소등록 유저페이지에서 입력할때 숙소테이블이랑 객실테이블에 필요한 값이 들어가서 동시에저장해야하는부분이라서 저도 처음이라 너무 헤맸는데요.. ㅠㅠ 코드를보니 1.객실테이블에 숙소테이블 외래키를 keyProperty="aid" 로만 넣고 마이바티스 필드값?으로 aid를 추가하지않았고 그 값을 제가 지정한 값으로 넣어주었습니다 2. 서비스단에 동시에 저장하는 메서드를 숙소를 정보를 저장하는곳에 추가하였습니다! 이렇게 두개 수정하였더니 동시이 저장되면서 숙소아이디를 받아오면서 객실정보에도 저장이 됐습니다!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 02월 20일

여러가지 방법이 있지만 가장 일반적인 접근 방식은 다음과 같습니다. 1. `accommodation` 테이블에 먼저 데이터를 넣음으로써 기본키를 생성합니다. 2. 이 생성된 기본키(id)는 mybatis에서 반환받아서 `room_info` 테이블의 외래키로 사용됩니다. 2번 과정에서 발생하는 오류는 아마도 `room_info` 테이블에 외래키를 넣기 전에 이미 해당 키값을 찾으려고 하기 때문일 가능성이 큽니다. 따라서, accommodation 테이블에 데이터를 넣어주는 로직을 실행한 후, 그 결과로 받은 id 값을 room_info 테이블의 aid 필드에 넣어주면 될 것입니다. 그리고 맵핑 함수도 숙소와 객실 정보가 동시에 저장되야 하므로 순차적으로 진행되게끔 구현해야 합니다. 자세한 구현 방법은 사용하시는 프레임워크나 라이브러리 문서를 참조하시면 좋겠습니다. 그래도 계속 문제가 해결되지 않는다면, stackoverflow와 같은 개발자 커뮤니티에서 비슷한 문제를 겪었던 사람들의 경험을 참고하실 수 있습니다.

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!