(방학특강) [스프링Data JPA교육]N:1 양방향관계 저장,검색,삭제 실습,@ManyToOne, @OntToMany, mappdBy란 - 스프링실무교육학원
N : 1 양방향
n 테이블 간의 관계는 N:1 로 동일하지만 방향성이 양방향 이다. 이전 단방향 에서 추가적으로 DEPT 쪽에서 EMP들을 참조하므로 양방향 관계가 된다.
n @OneToMany쪽에 mappedBy 속성으로 자신의 객체참조를 가리키는 Owner 테이블(외래키 테이블)의 필드를 지정하면 된다. (Owner쪽은 @ManyToOne이 된다.) 양방향 관계에서 관계 연결처리를 하는 쪽, 외래키가 있는쪽(多)을 Owner라 한다.
n 양방향 관계에서 @ManyToOne은 Owning Side 이며, @OneToMany는 Inverse Side 이다.
n 양방향 관계에서 Inverse Side의 mappedBy는 @OneToOne, @OneToMany, or @ManyToMany에 사용되고 Owning Side의 inversedBy는 @OneToOne, @ManyToOne, or @ManyToMany에 사용되는 속성이다.
n mappedBy로 선언된 emps 필드(inverse field, 주인의 반대쪽 필드)는 영속성 필드이기 보다는 EMP의 dept 필드에 의해 종속되는 필드로 데이터베이스 테이블에 칼럼으로 생성되지 않는다.
n 대신 emps는 DEPT 엔티티가 DB에서 검색될 때 자동으로 활성화 된다. (지연, 즉시 읽기에 따라 로딩되는 시점은 다름)
n EMP 엔티티는 주인(OWNER)이며 주인 엔티티에서 일어난 변화만 DB에 반영되며 반대쪽 엔티티인 DEPT 엔티티의 변화는 DB에 저장되지 않으며 검색시에만 참조되어 계산된다.
n Owner쪽(EMP)의 dept필드는 인덱스로 이용되어 검색속도가 향상 될 수 있으며, 만약 DEPT 엔티티의 emps 필드가 자주 사용된다면 관계를 두 개의 단방향으로 바꾸어 영속 필드로 두는 것이 효율적이다.
댓글 없음:
댓글 쓰기