Posts [자바 ORM 표준 JPA 프로그래밍-기본편] 실전 예제4 - 상속관계 매핑
Post
Cancel

[자바 ORM 표준 JPA 프로그래밍-기본편] 실전 예제4 - 상속관계 매핑

본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다.


요구사항 추가

  • 상품의 종류는 음반, 도서, 영화가 있고 이후 더 확장될 수 있다.
  • 모든 데이터는 등록일과 수정일이 필수다.

도메인 모델

image

도메인 모델 상세

image

테이블 설계

image

실습 코드

BaseEntity.java

1
2
3
4
5
6
7
8
9
@MappedSuperclass
public abstract class BaseEntity {

    private String createdBy;
    private LocalDateTime createdDate;
    private String lastModifiedBy;
    private LocalDateTime lastModifiedDate;
    ...
}

Item.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn
public abstract class Item extends BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ITEM_ID")
    private Long id;

    private String name;
    private int price;
    private int stockQuantity;

    @ManyToMany(mappedBy = "items")
    private List<Category> categories = new ArrayList<>();
    ...
}

Album.java

1
2
3
4
5
6
7
@Entity
public class Album extends Item {

    private String artist;
    private String etc;
    ...
}

Movie.java

1
2
3
4
5
6
7
@Entity
public class Movie extends Item {

    private String director;
    private String actor;
    ...
}

Book.java

1
2
3
4
5
6
7
@Entity
public class Book extends Item {

    private String author;
    private String isbn;
    ...
}

정리

애플리케이션이 사용자도 많지 않고 그럴땐 상속관계가 잘 동작한다. 하지만 애플리케이션이 커져 데이터가 엄청 많아지면 고민거리가 확늘어난다. 그러면 테이블을 단순하게 유지해야 된다. 정답은 없지만 우선 처음부터 모든 애플리케이션이 크지 않기에 객체지향적으로 가다가 나중에 필요할때 구조를 변경해주면 된다.

This post is licensed under CC BY 4.0 by the author.

[자바 ORM 표준 JPA 프로그래밍-기본편] Mapped Supperclass - 매핑 정보 상속

[자바 ORM 표준 JPA 프로그래밍-기본편] 프록시와 연관관계 관리