-
[Hibernate] 단/양방향 테이블 맵핑카테고리 없음 2021. 11. 10. 00:44
HIbernate를 처음 공부하기 시작했는데 생각보다 헛갈리는 것이 많다. 이전에 알고 있던 SQL이 많은 도움이 되지만 조그마한 차이 때문에 어려움을 겪고 있다.
이번에는 단/양방향 테이블 맵핑시에 어노테이션 문제에 대해서 한번 알아보고자 한다.
먼저 Hibernate는 각 엔티티에 관계된 모든 정보를 가져온다는 것을 전제로 깔아놓아야한다.
1. 단방향
위와 같은 테이블이 있다고 가정해보자. course테이블이 있어야 review테이블이 있는 종속의 관계로 단방향 테이블 맵핑이 이루어진다. 실제로 모든 정보를 불러오려면 SQL로는 다음과 같겠지만 Hibernate는 다르다.
SELECT * FROM COURSE LEFT JOIN REVIEW ON COURSE.ID = REVIEW.COURSE_ID
SQL의 구문에 따라 해석한다면 review의 모든 id와 course의 id가 맞는 쪽을 선택하겠지만 Hibernate는 다르다. course를 조회해도 그와 관련된 모든 reivew정보가 나와야 한다는 전제에 따라 Entity를 설정해주어야 한다.
따라서 Entity(Model)작성시 review Entity가 아닌 Course쪽에 review_id에 대한 정보(어노테이션)를 줘야한다.
2. 양방향
양방향의 경우 두 테이블이 맵핑되어있다고 한다면 양쪽 테이블 모두 접근할 수 있어야한다. 이 때에는 주 종의 테이블이 있다고 한다면 외래키를 가지고 있는 테이블에 JoinColumn 어노테이션을 쓰고, 반대 쪽에는 아래의 코드와 같이 맵핑을 걸어주면 된다.
@OneToMany(mappedBy = "instructor" , cascade = {CascadeType.PERSIST , CascadeType.DETACH , CascadeType.MERGE , CascadeType.REFRESH})
다른 관계에 대해서는 이후 다시 기술할 예정입니다.