단방향 연관관계

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가 업데이트된다!

Last updated

Was this helpful?