프로젝트

15일차

사랑박 2023. 3. 6. 15:17

오늘은 Part2.게시판 서비스 강의의 `데이터베이스 접근 로직 테스트 정의4` 부분을 학습하였다.
 

JPA 다양한 연관관계 매핑

연관관계의 주인
연관관계를 갖는 두 테이블에서 외래키를 갖게되는 테이블이 연관관계의 주인이다.
연관관계의 주인만이 외래 키를 관리(등록, 수정, 삭제) 할 수 있고, 주인이 아닌 엔티티는 읽기만 할 수 있다.
 
@JoinColumn(name = "TEAM_ID")
@JoinColumn 어노테이션은 외래 키를 매핑할 때 사용한다. name 속성에는 매핑 할 외래키 이름일 지정한다.
 

@ManyToOne - 단방향

외래키가 있는 곳에 참조를 걸고 연관관계 매핑을 한다. DB입장에서 보면 당연히 N에 FK가 있어야 한다.
단방향 관계를 맺으므로 외래키가 생겼기 때문에 N의 정보들을 가져올 수 있다.
 

@OneToMany로 양방향 관계 맺기

주인이 아닌 엔티티 클래스에 연관관계 주인을 정하기 위해 @OneToMany에 mappedBy 속성을 추가 한다.
 
연관관계 주인을 정하는 방법

  • 주인은 mappedBy 속성을 사용하지 않고, @JoinColumn을 사용
  • 주인이 아닌 엔티티 클래스는 mappedBy 속성을 사용해 주인을 지정

 

@OneToOne

한 유저가 한 개의 블로그만 만들 수 있는 블로그 서비스가 있으면 유저와 블로그는 1:1 관계이다.
둘 중에 어떤 엔티티가 외래키를 갖고 있을지 결정할 때
한 유저가 여러 개의 블로그를 가질 수 있도록 확장(OneToMany)될 수 있음을 고려 한다면, 블로그에서 유저의 외래키를 갖는 것이 좋을 것이고,
유저를 조회 했을 때 자동으로 블로그 엔티티도 조회 되는 것이 좋겠다고 생각하면 유저에서 블로그의 외래키를 갖는 것이 좋다.
 

@ManyToMany - 실무 사용 금지

중간 테이블이 숨겨져 있기 때문에 자기도 모르는 복잡한 조인 쿼리가 발생하는 경우가 생길 수 있 때문이다.
다대다를 중간 매핑 테이블을 생성하여 일대다, 다대일로 풀어서 만드는 것이 추후 변경에도 유연하게 대처할 수 있다.
 
 
EqualsAndHashCode

  • equals는 두 객체의 내용이 같은지, 동등성(equality) 를 비교하는 연산자
  • hashCode는 두 객체가 같은 객체인지, 동일성(identity) 를 비교하는 연산자

 
테스트를 작성할 때
org.junit.jupiter.api.Assertions보다 org.assertj.core.api.Assertions를 더 선호한다.
 
 
 

'프로젝트' 카테고리의 다른 글

17일차  (0) 2023.03.08
16일차  (0) 2023.03.07
14일차  (0) 2023.03.05
13일차  (0) 2023.03.04
12일차  (0) 2023.03.03