인프런 커뮤니티 질문&답변

Kedric Kim님의 프로필 이미지
Kedric Kim

작성한 질문수

실전! Querydsl

연관관계 save 관련하여 질문드려요 !

작성

·

204

0

=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
안녕하세요 !
수업 완강 후, 사이드 프로젝트 진행중에 궁금한점이 생겨 질문드립니다
 
1:n 양방향 연관관계 에서
n쪽을 save하려는데 이슈가 발생했는데요.
 
우선 1:n을 Team : Member 라고 가정하고
팀은 기존에 생성해둔 데이터가 있습니다.
화면에서 팀의 대한 id값과 추가할 멤버 정보를 서버로 넘기면
 
서버에서 아래처럼 dto를 entity로 변환하고
Member member = new Member();
member.setName(memberDto.getName());

Team team = new Team();
team.setId(memberDto.getTeamId());

member.setTeam(team);

memberRepository.save(member);
save 를 실행해서 제가 원하는 결과값은
member만 insert가 되는 것인데
에러가 나더라구요.
 
구글링을 해서 찾아보니 cascade 를 ALL 로 주라고 하여서 실행해보면
Team table에도 정보가 같이 입력되는것을 확인했습니다.
 
하여 제 생각에는 id값 만으로는 기존 Team을 특정할수가 없어서 그런건가 싶어서
해결한 방식은
화면에서 id값을 넘겼을때
해당 id값으로 Team 정보를 조회하고
해당 정보를 아래처럼 세팅하여 저장하였습니다.
Member member = new Member();
member.setName(memberDto.getName());

member.setTeam(team); // id값으로 조회한 team 을 넘겨서 세팅
memberRepository.save(member); 
 
이렇게 원하는 결과값을 얻어 해결은 하였는데
과연 이게 맞는 방법인가 싶어서 질문드려요
id값 만으로 자식 인자를 insert하면 될줄 알았는데
꼭 부모값 조회가 한번은 필요한 것인지 해서요
 
제가 잘 알지 못해서 이게 맞는 방법인것인지 아니면
방법이 있는데 모르는 것인지 궁금합니다 !
 
답변 부탁드립니다 !
감사합니다

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. Kedric Kim님

회원을 먼저 영속상태로 만들어야 합니다.

Member member = new Member();

member.setName(memberDto.getName());

em.persist(member); // 이 부분을 넣어주세요.

 

감사합니다.

Kedric Kim님의 프로필 이미지
Kedric Kim

작성한 질문수

질문하기