작성
·
300
·
수정됨
1
em.flush() em.clear를 해야지만 findTeam.getMembers()를 통해서 members조회가 가능하더라구요. 제가 이해한 바로는 Team안에
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
이렇게 되어있지만 우리가 members에 대해서 설정한 부분이 없다. 여기까지는 이해했습니다. 그렇다면 이렇게 설정하고 DB에 flush를 하면 JPA가 알아서 Team에 대한 members를 넣어주는건가요? 아니면 em.find(Member.class,member.getId())를 했을 때에 JPA가 members를 찾아주나요? 이것이 궁금합니다.
답변 2
0
저도 이게 궁금합니다. Team의 members에는 우리가 값을넣어주지 않았는데, 어떻게 findMember.getTeam().getMemebers()에 멤버가 들어있을 수 있는 건가요? ㅠㅠ 너무 헷갈리네요..
Member findMember = em.find(Member.class, member1.getId());
이렇게 코드를 쳤을 때 join으로 team 테이블 까지 같이 가져오는 건 알겠는데, 어떻게 team의 members 컬렉션에 member가 저장되는 걸까요...
정원님도 8강까지 가서 의문이 해결되셨나요?
안녕하세요 일단 저는 강의를 다 들었던 상태이긴 한데... 지금 이 상황이라고 해야할까요? team과 members가 서로 양방향 연관관계이지 않을까 생각합니다. 그렇기 때문에 연관관계의 주인을 통해서 데이터를 입력하게 된다면? 객체 입장에서는 난 분명
members.setTeam
을 한것이지team.setMembers
를 했는데 어떻게 team에서 member.id를 통해서 member를 찾을 수 있지? 라고 생각하실 수 있을 것 같네요. 제가 느낀바로는 객체세상과 DB세상이 공존한다고 해야할까요? 분명 우리는 객체에서는 앞서 설명드린것처럼 team에다가 멤버를 세팅?하는 느낌이었지만 저렇게 객체에서 세팅을하고 flush clear를 하게되면 db세상에서는 member의 외래키로 team의 id가 몇이라고 세팅이 될 것입니다. 그렇기 때문에 db적으로 봤을 때 findMember.getTeam을 하면 db에서 외래키인 team의id를 통해서 team을 찾겠죠. 거기서 이제 team의 id를 통해서 teamId가 1인 member들을 찾아줘!라고 하는것이죠.어떻게 team의 members컬렉션에 member가 저장되냐라고 물으시면 양방향 연관관계를 설정했을 때 연관관계의 주인을 통해서 값을 추가하거나 변경하거나 삭제를 하게되면 그게 db에 그대로 적용이 될겁니다. 객체 입장에서는 collection에 넣은것이 아니지만 db적으로 봤을때는 그렇게 되는거죠. 그렇기 때문에 collection에서 가져올때도 collection에서 가져오는 것이 아니라 db에서 가져온다? 라고 저는 이해했습니다.