Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

[예제] 상속관계 매핑 본문

인프런/[인프런] 자바ORM 표준 JPA 프로그래밍

[예제] 상속관계 매핑

Seung__ 2021. 8. 11. 22:42

1. 요구사항 추가


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

 

2. 도메인 모델


 

 

3. 도메인 모델 상세


 

4. 테이블 설계


 

5. Item class


  • @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
  • @DiscriminatorColumn
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn
public abstract class Item {

    @Id
    @GeneratedValue() //default = auto.
    @Column(name = "ITEM_ID")
    private Long id;
Hibernate: 
    
    create table Item (
       DTYPE varchar(31) not null,
        ITEM_ID bigint not null,
        name varchar(255),
        price integer not null,
        stockQuantity integer not null,
        actor varchar(255),
        director varchar(255),
        author varchar(255),
        isbn varchar(255),
        artist varchar(255),
        etc varchar(255),
        primary key (ITEM_ID)
    )

 

6. Test


  • book 을 저장해 보자.
Book book = new Book();
book.setName("booook");
book.setAuthor("nananana");
em.persist(book);
tx.commit();

  • 전략을 JOINED로 바꿔보자.
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn
public abstract class Item {
Hibernate: 
    
    create table Book (
       author varchar(255),
        isbn varchar(255),
        ITEM_ID bigint not null,
        primary key (ITEM_ID)
    )

 

7. @MappedSuperclass


  • BaseEntity
@MappedSuperclass
public abstract class BaseEntity {

    private String createdBy;
    private LocalDateTime createdDate;
    private String modifiedBy;
    private String lastModifiedBy;
    private LocalDateTime lastModifiedDate;
  • Item class를 상속받는 class는 BaseEntity를 별도로 상속받을 필요 없음
  • Item이 BaseEntity 상속받음
  • 각 테이블에 BaseEntity 속성이 추가된 것을 확인할 수 있다.
Hibernate: 
    
    create table Team (
       TEAM_ID bigint not null,
        createdBy varchar(255),
        createdDate timestamp,
        lastModifiedBy varchar(255),
        lastModifiedDate timestamp,
        modifiedBy varchar(255),
        name varchar(255),
        primary key (TEAM_ID)
    )

 

8. Github : 210811 EXAMPLE


 

GitHub - bsh6463/JPA_EXAMPLE

Contribute to bsh6463/JPA_EXAMPLE development by creating an account on GitHub.

github.com

 

'인프런 > [인프런] 자바ORM 표준 JPA 프로그래밍' 카테고리의 다른 글

즉시 로딩과 지연 로딩.  (0) 2021.08.12
프록시  (0) 2021.08.12
@MappedSuperclass  (0) 2021.08.11
상속관계  (0) 2021.08.11
[예제] 다양한 연관관계 추가  (0) 2021.08.11
Comments