프로그래밍n학습자료(2018~)/Hibernate

[Hibernate] 2. Hibernate(하이버네이트) 테이블 관계 맵핑-단방향/양방향

단세포소년 2018. 3. 8. 16:50
반응형

Hibernate 테이블 관계 맵핑

 

관계 맵핑은 관계의 종속성이 있고 또한 관계가 많지 않을 사용하는 것이 좋다. 예를 들어 OneToMany에서 Many 진짜 많다면 select 대해서 엄청난 부하가 발생할 것이다. 관계가 많지 않거나 조건(where) 통해서 관계가 적은 경우. 부하가 많이 발생하지 않고 해당 관계가 자주 쓰이는 경우에만 관계 맵핑을 하는 것이 좋다.

 

 

 

 

 

Unidirectional,Bi-directional (단방향,양방향)

단방향, 양방향에 대해 알아보자. 일단 밑의 관계 맵핑을 보고 나서 본다면 쉽게 이해할 것이다.

 

단방향

관계 맵핑에서 단방향은 한쪽에서만의 관계 맵핑이 경우이다. A->B 이런 관계이다.

A에서 B로의 관계 맵핑만 되어 있어서 A에서는 B 얻을 있는데 역은 안되는 경우이다.

보통 단방향시 A->B라면 A B 대한 참조 컬럼이 있다고 판단한다. Cascade 설정되어 있는 경우 A 저장시 관계에 따라 행동한다.

 

들어 OneToOne 관계의 경우 A B 참조를 가지기 때문에

Cascade 설정된 상태에서 A 저장시 B 먼저 저장되고 그다음 A 저장된다.

 

다른 예로 OneToMany 관계의 경우 B A 참조를 가진다. 이때는 B A 참조를 가지므로 A 먼저 저장되고 그다음 B 저장된다. 이때 B 존재하는 A로의 참조값은 Update 통해 갱신된다. 왜냐면 B에서 A로의 관계맵핑이 없으므로 B A 모르기 때문에 A B Update 하는 방식으로 진행되는 듯하다.

 

 

양방향

양방향은 A<=>B 관계이다. 어노테이션 설정만 보더라도 B 변수에 관계맵핑을 해주면 A에서는 B 관계맵핑 변수명만 가지면 된다. 왜냐면 한쪽의 관계의 역이 결국 반대쪽의 관계이기 때문이다.

 

양방향 관계에서 주의할 점은 서로가 서로를 지켜보고 있기 때문에 서로가 서로를 설정해주어야 한다. 한쪽에서만 설정하고 한쪽은 설정하지 않는다면 원하는 동작을 얻지 못한다.

 

서로가 서로를 알고 있으므로 단방향과 다르게 참조를 Update한다던지 참조값을 모른다던지 하는 문제는 없다.

 

 

 

  1. 글쓴이의 생각에서는 관계가 무조건 존재하는 참조 컬럼이 Not Null 경우( 1~N:N 관계) 양방향을 쓰는 것이 좋고,
  2. 관계가 존재하지 않을 수도 있는 참조 컬럼이 Null 있는 경우( 0~N:N ) 단방향을 쓰는 것이 좋다.

반응형