woowacourse-study / 2022-jpa-study

🔥 우아한테크코스 4기 JPA 스터디 (22.06.13~22.07.02) 🔥
5 stars 1 forks source link

[섹션 6, 섹션 7] 헌치 제출합니다 #16

Closed BETTERFUTURE4 closed 2 years ago

BETTERFUTURE4 commented 2 years ago

섹션 6 : 다양한 연관관계 매핑

6-1 연관관계 매핑 시 고려사항

1) 다중성

2) 단방향, 양방향

3) 연관관계 주인

6-2 다대일/일대다

1) 다대일(제일 중요)

가장 많이 사용, 다 쪽이 주인(FK)

양방향


@Entity
public class Member {

    private Long id;

    @ManyToOne
    @JoinColumn(name = "TEAM_ID")
    private Team team;
}

@Entity
public class Team {
    @Id
    @GeneratedValue
    private Long id;

    @OneToMany(mappedBy = "team")
    List<Member> members = new ArrayList<Member>();
}

2) 일대다

일 쪽이 주인(FK), 사용 X

6-3 일대일

주 테이블과 대상 테이블 중 FK(주인) 지정

1) 주 테이블에 외래키

2) 대상 테이블에 외래키

6-4 다대다

일대다(@OneToMany) <-> 연결테이블 <-> 다대일(@ManyToOne)

섹션 7 : 고급 매핑

7-1 상속관계 매핑

1) 어노테이션


@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "DTYPE")
public class Item {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Integer price;
}

@Entity
@DiscriminatuinValue("A")
public class Album extends Item {
    private String artist;
}

2) 조인 전략

a. 장점

b. 단점

3) 단일테이블 전략

a. 장점

b. 단점

4) 구현클래스별 테이블 전략

a. 장점

b. 단점

7-2 @MappedSuperclass


@MappedSuperclass
public abstract class BaseEntity {
    private Date createdAt;
    private Date updatedAt;
}

@Entity
@AttributeOverride(name = "createdAt", column = @Column(name = "publishedAt"))
//원하는 매핑정보 재정의
public class Book extends BaseEntity {
    private Long bookId;
    private String bookName;
}

@Entity
public class Movie extends BaseEntity {
    private Long movieId;
    private String movieName;
}

1) 특징

2) 참고사항