JPA 연관관계 설정
(@OneToOne/@OneToMany/@ManyToOne/@ManyToMany)
데이터베이스 테이블 간의 관계 설정은 일대일/일대다/다대일/다대다 관계가 있다. JPA에서는 이를 어노테이션으로 간단하게 달 수 있다.
관계 | Annotation |
일대일 | @OneToOne |
일대다 | @OneToMany |
다대일 | @ManyToOne |
다대다 | @ManyToMany |
예를 들어 보자. user 테이블과 item 테이블의 관계는 어떻게 될까?
한 명의 user는 여러 개의 item을 구매할 수 있다. 따라서 1:N의 관계로 정의할 수 있다. 하지만 이 둘의 테이블을 한 번에 연결시키고자 한다면, 한 쪽에서 반대 쪽에 해당하는 id(외래키에 해당하는 index)를 가지고 있어야 한다. 하지만 user 테이블에서 item_id를 가지고 있다고 가정하면, 한 명의 user는 한 개의 item만 가질 수 있게 되는 꼴이므로, user 테이블에는 item_id가 들어갈 수 없다. 마찬가지로 item 테이블에서도 여러 명의 user가 같은 item을 가질 수 있으므로 여러 개의 user_id를 가질 수 없다. 그렇기 때문에 이 두 테이블은 각각의 키를 서로 연결할 수 없다. 따라서 중간에 order_detail(주문 내역) 테이블을 놓아서 아래와 같이 두 테이블을 연결해줘야 한다.
이런식으로 관계를 설계하면 사용자에 대해서 총 어떤 item을 주문했는지 조회할 수 있고, 반대로 item의 입장에서 몇 명의 사용자가 해당 item을 구매했는지 조회할 수도 있다.
위와 같이 적절한 관계 설정을 한 테이블 설계가 끝났다면 이제 그에 맞는 entity를 만들어줘야 한다. 자세한 방법은 다음 글에서 소개하겠다.
(출처: 패스트캠퍼스 Java & SpringBoot로 시작하는 웹 프로그래밍)
'Java' 카테고리의 다른 글
JPA 연관관계 설정 구체적인 방법 (fetch 타입 종류: LAZY, EAGER) (0) | 2022.02.25 |
---|---|
[JPA] entity와 repository 생성 (+ JUnit Test 실행 방법) (0) | 2022.02.25 |
JpaRepository를 활용한 CRUD 구현 방법 (자세한 설명) (0) | 2022.02.24 |
Lombok(롬복) & JPA 에 대한 간단한 설명, 기본 애너테이션(@) 몇 가지 (0) | 2022.02.24 |
[Spring Boot] Post 메소드 사용법 (@PostMapping) (0) | 2022.02.23 |