[JPA연관관계매핑]복합키와 식별관계,비식별관례,엔티티매핑
엔티티 매핑(Entity Mapping) – 연관관계
n 두 엔티티가 연관을 맺는 연관관계에는 방향성(direction), 다양(중)성(multiplicity), 주체(owner)라는 개념이 존재한다.
ü Direction : 두 객체가 관계를 맺을 때 한쪽에서만 참조하는 경우 단 방향이라 하고 양쪽 객체가 서로 참조하는 경우를 양방향 연관관계라고 한다.
ü Multiplicity : 하나의 객체가 참조하는 객체가 한 개, 한 개 이상 등 다양성이 있는데 1:1, 1:N, M:N관계가 있다.
ü Owner : 연관관계에서의 주인이 되는 객체
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;
}
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는구현해야
}
}
댓글 없음:
댓글 쓰기