Java

JPA 연관관계 설정 (@OneToOne/@OneToMany/@ManyToOne/@ManyToMany)

15호의 개발자 2022. 2. 25. 11:55
반응형

JPA 연관관계 설정

(@OneToOne/@OneToMany/@ManyToOne/@ManyToMany)

 

 

이전 글

 

JpaRepository를 활용한 CRUD 구현 방법 (자세한 설명)

JpaRepository를 활용한 CRUD 구현 방법 (자세한 설명) 이 게시글은 아래 글과 이어지는 글이다. Lombok(롬복) & JPA 에 대한 간단한 설명, 기본 애너테이션(@) 몇 가지 Lombok(롬복) & JPA 에 대한 간..

unit-15.tistory.com

 


 

데이터베이스 테이블 간의 관계 설정은 일대일/일대다/다대일/다대다 관계가 있다. 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를 만들어줘야 한다. 자세한 방법은 다음 글에서 소개하겠다.

 

 

다음 글

 

[JPA] entity와 repository 생성 (+ JUnit Test 실행 방법)

[JPA] entity와 repository 생성 (+ JUnit Test 실행 방법) 이 게시글은 아래 글과 이어지는 글이다. JPA 연관관계 설정 (@OneToOne/@OneToMany/@ManyToOne/@ManyToMany) JPA 연관관계 설정 (@OneToOne/@O..

unit-15.tistory.com

 

 

 

(출처: 패스트캠퍼스 Java & SpringBoot로 시작하는 웹 프로그래밍)

반응형