2016년 11월 22일 화요일

[자바강의,스프링강의,JPA강의추천_탑크리에듀][JPA연관관계매핑]복합키와 식별관계,비식별관례,엔티티매핑

[JPA연관관계매핑]복합키와 식별관계,비식별관례,엔티티매핑
 
엔티티 매핑(Entity Mapping) – 연관관계

n  두 엔티티가 연관을 맺는 연관관계에는 방향성(direction), 다양()(multiplicity), 주체(owner)라는 개념이 존재한다.
ü  Direction : 두 객체가 관계를 맺을 때 한쪽에서만 참조하는 경우 단 방향이라 하고 양쪽 객체가 서로 참조하는 경우를 양방향 연관관계라고 한다.
ü  Multiplicity : 하나의 객체가 참조하는 객체가 한 개한 개 이상 등 다양성이 있는데 1:1, 1:N, M:N관계가 있다.
ü  Owner : 연관관계에서의 주인이 되는 객체

2-4-1. 복합키와 비식별 관계

n  외래키가 기본키에 포함되는지 여부에 따라 식별관계비식별 관계로 구별할 수 있다.
n  아래의 경우 부모테이블의 키가 자식테이블에 참조되는데 비 식별관계이다부모테이블의 PK가 자식테이블에 외래키(FK)로 참조될 때 기본키(PK)로 내려가는 것이 아니라 일반 칼럼으로 참조되는 것이다.
 

 
:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
@Entity
public class Parent {
   @EmbeddedId
   protected ParentKey pkey;
          
   @Embeddedable
   public static class ParentKey implements Serializable
   {                
      @Column
      private String id1;
      @Column
      private String id2;            
      //getter, setter, equals, hashCode는 구현해야 한다.
   }
}

@Entity
public class Child {
   @Id
   private String id;
          
   @ManyToOne
   @JoinColumns({     
       @JoinColumn(name="parent_id1",referencedColumnName="id1"),
       @JoinColumn(name="parent_id2", referencedColumnName="id2")
    })
   private Parent parent;
}



2-4-2. 복합키와 식별 관계

n  아래의 경우 부모테이블의 키가 자식테이블의 칼럼으로 참조되는데 식별관계이다즉 부모테이블의 PK가 자식테이블에 외래키(FK)로 참조될 때 자식의 기본키(PK)로 참조된다.
n  @EmbeddedId를 식별관계로 매핑하기 위해서는 @MapsId를 지정해야 하고 속성값으로는 @Embeddedable로 지정된 식별자에서 참조하는 연관객체의 기본키를 지정하면 된다.
 

 
@Entity
public class Child {
   @EmbeddedId
   private ChildKey id;
          
   @ManyToOne
   @JoinColumns({
     @JoinColumn(name="parent_id1", referencedColumnName="id1"),
     @JoinColumn(name="parent_id2", referencedColumnName="id2")
   })
   //Embeddedable로 지정한 식별자의 기본키필드지정
   //PK(키값)으로 매핑됨을 의미한다.
   @MapsId("parentKey") 
   private Parent parent;

@Embeddedable
public static class ChildKey implements Serializable {
   private ParentKey parentKey;          
    @Column
    private String id;
    //getter, setter, equals, hashCode는구현해야
   }
}


댓글 없음:

댓글 쓰기