[Start Spring Boot] Entity Mapping

·2024년 3월 22일
0

Start Spring Boot!

목록 보기
27/53
post-thumbnail

Mapping

What is?

  • 테이블 사이의 연관관계를 만드는 일
  • 팀에는 선수가 있음
    -> 팀과 선수는 연관관계가 있다!

종류

  • 일대일 <> 일대일
  • 일대다 <> 다대일
  • 다대다 <> 다대다

Team, Player

  • Team은 Player를 여러개 가진다.
  • Player는 Team이 한개이다.
    -> 일대다 <> 다대일

Spring에서

mapping

  • @OneToOne
  • @OneToMany
  • @ManyToOne
  • @ManyToMany

mappedBy

  • @OneToMany(mappedBy = "team") 다음과 같이 사용한다,
  • 모두 객체에 접근이 가능하다면 무결성을 해칠 수 있다.
  • 하나의 객체만 테이블을 관리할 수 있도록 하는 방식
  • mappedBy를 지정하면 다른 테이블을 관리할 수 없음!
  • mappedBy를 지정하지 않은 테이블이 주인임
  • 일반적으로 외래키를 가지는 객체를 주인으로 정함

fetch

  • @ManyToOne(fetch = FetchType.LAZY) 다음과 같이 사용
  • fetch = FetchType.LAZY: 지연로딩
  • fetch = FetchType.EAGER: 즉시로딩

지연로딩 vs 즉시로딩

  • 지연로딩은 프록시를 실제 사용할 때 초기화하면서 데이터베이스를 조회
  • 즉시로딩은 바로 조회
  • 즉시로딩에서 N+1 문제가 발생함

Player 구성하기

Entity

  • Player.java
@Entity
public class Player {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    @Column
    private String name;
    @Column
    private long number;

    @ManyToOne(fetch = FetchType.LAZY)
    @JsonIgnore
    private Team team;
    
}
  • Team.java
@Entity(name = "team")
public class Team {

    @OneToMany(mappedBy = "team")
    @JsonIgnore
    private List<Player> players;

}
  • 연관관계의 주인은 Player

다음과 같이 Player을 조회하면 Team 필드가 있다!

profile
백엔드 개발자가 꿈인 컴공과

0개의 댓글

관련 채용 정보