단방향 연관관계
Last updated
Last updated
OOP가 지향하는 패러다임과 RDB가 지향하는 패러다임이 다르기 때문에 둘의 차이점으로 인한 개발의 어려움이 있다.
연관 관계 객체 : 참조(Reference) 테이블 : 외래키
객체의 참조와 테이블의 외래키를 어떻게 매핑하나?
용어 이해
방향 : 단방향, 양방향
다중성 : 다대일, 일대다, 일대일, 다대다
연관관계의 주인 : 객체 양방향 연관관계는 관리 주인이 필요⭐️⭐️⭐️⭐️
OOP는 객체들의 연관성의 모음.
예제 시나리오
회원과 팀이 있다.
회원은 하나의 팀에만 소속될 수 있다. => 회원 - 팀 : 다대일 관계
1차 캐시에서 데이터 가져오기 때문에 SQL select 쿼리문이 나가지 않지만 굳이 눈으로 확인하고 싶다면 em.flush()로 현재 영속성 컨텍스트에 있는 데이터들을 DB에 업데이트해주고, em.clear()하면 영속성 컨텍스트가 다 지워지기 때문에 em.flush(), em.clear() 이후에 em.find()를 하면 SQL select 쿼리문을 새로 작성해서 쿼리 날리는 것을 확인할 수 있다!
객체 지향 모델링(ORM 매핑)
객체의 필드에 외래키를 그대로 가져오는 것이라 참조값(객체) 그 자체를 Member 내에 가져온다!
=>연관관계 저장, 조회, 수정이 자유롭다!
ManyToOne(디폴트 : fetch = FetchType.LAZY) : 쿼리가 분리되서 나간다.
연관관계 수정 member.setTeam(newTeam) : FK가 업데이트된다!