실습은
ex1-hello-jpa로 진행되었습니다.
DB:.../~/test

➡️
@Inheritance(strategy=InheritanceType.XXX)
XXX 자리에JOINED,SINGLE_TABLE,TABLE_PER_CLASS중 하나를 넣으면 된다.
또 다른 주요 어노테이션
@DiscriminatorColumn(name="DTYPE")@DiscriminatorValue("XXX")

// JpaMain.java
try {
Movie movie = new Movie();
movie.setDirector("A");
movie.setActor("B");
movie.setName("불한당");
movie.setPrice(10000);
em.persist(movie);
em.flush();
em.clear();
Movie findMovie = em.find(Movie.class, movie.getId());
System.out.println("findMovie = " + findMovie);
tx.commit();
} catch (Exception e) {


: 논리 모델을 한 테이블로 합쳐버림
📌 Item.java의
@Inheritance(strategy = InheritanceType.JOIN)➡️@Inheritance(strategy = InheritanceType.SINGLE_TABLE)로 변경하기만 하면 됨



📌 Item.java의
@Inheritance(strategy = InheritanceType.XXX)➡️@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)로 변경하기만 하면 됨


@MappedSuperclass: 아래와 같이 공통 매핑 정보가 필요할 때 사용

// BaseEntity.java
package hellojpa;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@MappedSuperclass // 매핑 정보만 받는 부모 클래스
public class BaseEntity {
private String createBy;
private LocalDateTime createDate;
private String lastModified;
private LocalDateTime lastModifiedDate;
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public LocalDateTime getCreateDate() {
return createDate;
}
public void setCreateDate(LocalDateTime createDate) {
this.createDate = createDate;
}
public String getLastModified() {
return lastModified;
}
public void setLastModified(String lastModified) {
this.lastModified = lastModified;
}
public LocalDateTime getLastModifiedDate() {
return lastModifiedDate;
}
public void setLastModifiedDate(LocalDateTime lastModifiedDate) {
this.lastModifiedDate = lastModifiedDate;
}
}
// Member.java
public class Member extends BaseEntity {
// Team.java
public class Team extends BaseEntity {
// JpaMain.java
try {
Member member = new Member();
member.setUsername("userA");
member.setCreateBy("Yoon");
member.setCreateDate(LocalDateTime.now());
em.persist(member);
em.flush();
em.clear();
tx.commit();
} catch (Exception e) {
마찬가지로 Team에도 생성됨
em.find(BaseEntity) 불가능)등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용📌 @Entity(상속 관계 매핑할 때 사용) 클래스는 엔티티나 @MappedSuperclass(속성만 상속할 때 사용)로 지정한 클래스만 상속 가능
해당 실습은
jpabook/jpashop으로 진행하였습니다.
DB: /~/jpashop
👩🏻💻 추가 요구사항
- (상속 관계 매핑) 상품의 종류는 음반, 도서, 영화. 그리고 이후 확장 가능.
- (MappedSuperclass) 모든 데이터는 등록일, 수정일을 가짐.



// Item.java
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn
public abstract class Item extends BaseEntity {

// Item.java
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn
public abstract class Item extends BaseEntity {
하지만 우린 싱글테이블 속성을 사용할 것
