Skipalong's tistory
231117 TIL - Entity 연관관계 본문
오늘은 이번주 내내 하던 과제를 잠시 접어두고 4주차 강의를 다시 듣기 시작했다. 그 중에 Entity의 관계에 대한 강의를 들었는데 개념이 약간 생소해서 그 내용을 정리해보려고 한다.
우선 DB 음식 테이블, 고객 테이블의 관계는 아래와 같다.
- 고객 한 명은 여러개의 음식을 주문할 수 있다 -> 고객 : 음식 = 1 : N
- 음식 한 종류는 여러명에게 주문될 수 있다. -> 음식 : 고객 = 1 : N
- 결과적으로 고객 : 음식 = N : M
DB 테이블간의 방향의 개념 : join을 활용하면 from절에 어떤 테이블이 오더라도 조회가 가능하므로 방향의 개념이 없다.
Entity 간의 방향의 개념 : Entity클래스 내부에 상대 Entity를 참조하면 상대 Entity도 조회가 가능하지만 참조하지 않으면 조회가 불가능한 단방향이 된다. 이러한 Entity간의 관계는 크게 네가지 관계(애너테이션)로 정리되는데 간단하게 정리해보겠다.
- @OneToOne
- 단방향 : 외래키(fk)의 주인Entity측이 @OneToOne@JoinColumn(name = "{entity_id}")애너테이션을 사용해 상대 Entity 를 참조하여 상대 Entity정보를 가져올 수 있다.
- 양방향 : 외래키의 주인Entity측은 단방향과 동일한 애너테이션을 사용해 상대 Entity를 참조하고, 상대 Entity는 @OneOtOne( mappedBy ="{상대 entity}" ) 애너테이션을 사용해 매핑을 하여 상대 Entity의 정보를 가져올 수 있다.
- 단방향 : 외래키(fk)의 주인Entity측이 @OneToOne@JoinColumn(name = "{entity_id}")애너테이션을 사용해 상대 Entity 를 참조하여 상대 Entity정보를 가져올 수 있다.
- @ManyToOne
- 단방향 : OneToOne의 단방향 관계에서 외래키의 주인 측의 @OneToOne을 @ManyToOne으로 바꾸면된다.
- 양방향 : Many측인 외래키의 주인Entity측은 단방향과 그대로 설정을 하고 One측인 상대 Entity에서는 @OneToMany(mappedBy = "{자신 entity}")을 사용하고 상대Entity여러개를 참조해야하기 때문에 참조를 할 때 ArrayList사용해 참조한다.
- @OneToMany
- 단방향 : One측인 외래키의 주인 Entity측에서 @OneToMany@JoinColumn(name = "{자신 entity_id}")애너테이션을 설정하고 Many측을 받아와야하기 때문에 ArrayList를 사용해 참조한다.
- 양방향 : OneToMany(1대N)관계에서는 일반적으로 양방향 관계가 존재하지 않는다.
- 단방향 : One측인 외래키의 주인 Entity측에서 @OneToMany@JoinColumn(name = "{자신 entity_id}")애너테이션을 설정하고 Many측을 받아와야하기 때문에 ArrayList를 사용해 참조한다.
- @ManyToMany
ManyToMany(N:M)관계를 풀어내기 위해서 중간테이블을 사용한다. 중간테이블( ex)음식-고객의 중간테이블:주문) 을 만들면
고객 : 주문 = 1 : M, 음식 : 주문 = 1 : N 이 되기 때문에 고객과 음식을 직접연결하지 않고 음식과 주문을 1 : N, 고객과 주문을 1 : M으로 관리 하면 되기 때문에 컨트롤하기 쉽고 확장에 용이해진다.
Entity의 관계를 간단하게 정리해보았는데 머리로는 어느정도 이해가지만 직접 코드를 짜보아야 확실히 이해될 것 같다. 다행히 이번과제에 할일 과 댓글간의 관계를 고려해보면서 바로 실습이 가능할 것 같아서 내일 코드를 짜보면서 한번 더 익혀보겠다. 주말도 화이팅
'TIL' 카테고리의 다른 글
231121 TIL - KPT회고 리마인드, 뉴스피드프로젝트 설계 (0) | 2023.11.22 |
---|---|
231120 TIL - 개인과제 짧 회고 (0) | 2023.11.21 |
231116 TIL - TodoApp 기능구현 (0) | 2023.11.17 |
231115 TIL - Todo App Trouble (1) | 2023.11.16 |
231114 TIL - Filter, Security (0) | 2023.11.15 |