상속관계 맵핑 관계형 데이터베이스에는 상속관계가 없음. 슈퍼타입 - 서브타입 관계 모델링 기법이 상속관계가 유사함 상속관계 맵핑은 객체의 상곡구조를 DB의 슈퍼타입 - 서브타입 관계에 맵핑하는 작업이 필요하다. 객체에는 상속관계가 있으나 RDBMS에는 상속관계가 없다. 그렇다면 객체의 상속관계를 RDBMS에는 어떻게 맵핑을 해야하는걸까? RDBMS에는 슈퍼타입 - 서브타입 관계 모델링이 있는데, 이 관계가 객체의 상속 관계 구조와 매우 유사하다. 따라서 객체의 상속 관계를 표현하기 위해서는 RDBMS의 슈퍼타입 - 서브타입 관계 모델링에 하나 하나 적용하는 방법이 필요하다. 슈퍼타입 - 서브타입 논리 모델의 구현 조인 전략 : 각 테이블을 하나씩 구현해서 맵핑 단일 테이블 전략 : 통합 테이블을 하나 만..
이번 포스팅에서는 다양한 연관관계 맵핑에 대해 공부한 내용을 복습/정리해보고자 한다. 연관관계 맵핑 시 고려해야 할 사항 다중성 단방향, 양방향 고려 연관관계의 주인 연관관계를 맵핑할 때 고려해야 할 사항은 기본적으로 위 세 가지라고 한다. 위 세 가지에 대해서 하나하나 풀어서 살펴보려고 한다. 다중성 다중성은 연관관계를 맺고자 하는 테이블이 어떤 관계를 가지고 있는지를 나타내는 것으로 이해하면 된다. 테이블과 연결시켜 주기 위해서는 필드에 어노테이션을 달아줘야하는데 @ManyToOne, @OneToMany, @ManyToMany, @OneToOne이 존재한다. 여기서 @ManyToMany 연관관계는 표현은 할 수 있으나 실무에서는 절대로 사용하지 않을 것이 권장된다고 한다. 단방향, 양방향 고려 단방향..
공부를 하다보니 다대일 연관관계를 가진 테이블이 있다면, 항상 FK가 '다'쪽 테이블에 있는 것이 당연하다는 이야기가 나왔다. 그런데 나는 그 부분을 이해를 잘 하지 못했다. 그래서 실제로 그림을 그리면서 한번 이해를 해봤다. 두 가지 경우로 나눠서 한번 생각을 해봤다. 다대일 연관 관계, '다'쪽에 외래키가 있을 때 위와 같은 관계가 있다고 가정했을 때, MEMBER와 TEAM을 JOIN하기 위해서 FK가 어떻게 동작할지를 생각해봤다. MEMBER는 항상 한 군데 팀에만 속할 수 있다. 따라서, 이 MEMBER와 연결된 TEAM을 가져오기 위해서는 MEMBER가 가지고 있는 TEAM_ID로 JOIN을 하면 정상적으로 MEMBER와 연결된 TEAM 테이블을 함께 가져올 수 있다. 다대일 연관관계, '일'..
연관관계의 필요성 앞선 글에서는 테이블과 객체를 맵핑하는 것들만 따져보았다. 즉, DB의 테이블과 자바의 객체가 연결되는 과정이었다. 그 과정에서 주목해야 할 부분은 내가 맵핑했던 테이블은 다른 테이블과의 연관관계가 없었다. Member라는 테이블이 있었는데, Member는 누구와도 관계를 맺지 않는 독고다이 Table이었다. Team, Member가 있다. Member는 하나의 Team에만 소속될 수 있다. Member와 Team은 다대일 관계다. 그런데 이런 상황이 추가되었다고 가정해보자. 위의 상황을 표로 도식화해보면 아래 그림과 같다. 테이블 관계만 따져보면 MEMBER와 TEAM Table은 TEAM_ID를 FK로 가지고, 그 값으로 서로 연관관계를 가지는 것을 알 수 있다. 반면 아직까지 그림..
JPA의 프록시를 왜 사용해야할까? // 이 경우는 TEAM + MEMBER 둘다 필요. Member member = em.find(Member.class, memberId) Team team = member.getTeam(); system.out.println("회원 이름 : " + member.getUsername()); ststem.out.println("소속 팀 : " + team.getName()); // 이 경우는 회원만 필요함. Member member = em.find(Member.class, memberId); Team team = member.getTeam(); system.out.println("회원 이름 : " + member.getUsername()); Member와 Team의 연..