[JPA강좌,연관관계매핑]@OneToMany, mappedBy란?
@OneToMany
n N:1 양방향관계에서 1쪽에서 N쪽으로의 방향성 또는 1:N 단반향에서는 컬렉션을 참조하므로 Set, List, Map을 사용할 수 있다.
n 1:N 관계는 잘 사용되지 않으며, 1:N(OneToMany) 단방향 보다는 M:1 양방향 관계를 사용하는 것이 좋다.
n List는 순서가 있고 중복을 허락하는 자료구조 이므로 자료들의 순서를 알 수 있고, 정렬이 가능하다. 자료들의 순서(인덱스)를 알기 위해서는 별도 인덱스 칼럼(@OrderColumn)이 정의되어야 한다.
n Map은 Key, Value 쌍으로 자료를 저장하는데 key설정을 위해 @MapKey를 사용하며, 실제 테이블의 칼럼을 지정할 때는 @MapKeyColumn을 사용한다.
n @OneToMany 속성
ü targetEntity : 연결을 맺는 상대 엔티티
ü cascade : 관계 엔티티의 읽기 전략을 설정.
ü mappedBy : 양뱡향 관계에서 주체가 되는 쪽(Many쪽, 외래키가 있는 쪽)을 정의
ü orphanRemoval : 연관 관례에 있는 엔티티에서 변경이 일어난 경우 DB 변경을 같이 할지 결정합니다. Cascade는 JPA 레이어의 정의이고 이 속성은 DB레이어 에서 직접 처리한다. 기본은 false
n 테이블은 외래키 하나로 두 테이블의 연관관계를 관리하는데 엔티티를 단방향으로 매핑하면 참조를 하나만 사용하고, 양방향 관계로 설정하면 객체의 참조는 양쪽에서 하나씩 둘인데, 외래 키는 하나이므로 두 엔티티 중 하나(OWNER)를 정해서 테이블의 외래키를 관리해야 하고 MANY쪽이 OWNER 이며 mappedBy는 @OneToMany쪽의 컬렉션 칼럼에 기술하여 OWNER가 아님을 정의한다.
n mappdBy는 @OneToOne, @OneToMany, @ManyToMany 어노테이션에서 사용할 수 있으며 mappedBy가 없으면 JAP에서 양뱡향 관계라는 것을 모르고 두 엔티티의 매핑 테이블을 생성한다.
n mappedBy는 OWBER 엔티티의 필드나 속성과 대응된다.
n ManyToOne 양방향 관계에서 Many측에는 mappedBy요소를 사용할 수 없다.(MANY 쪽이 OWNER)
n OneToOne 양방향 관계에서 OWNER는 반대쪽(INVERSE SIDE)에 대한 FK를 가지는 쪽이다.
n ManyToMany 양방향 관계는 양쪽 중 아무나 OWNER가 될 수 있다.
출처 : http://ojc.asia/bbs/board.php?bo_table=LecJpa&wr_id=230