@MappedSuperClass

XingXi·2024년 1월 3일
0

JPA

목록 보기
14/23
post-thumbnail

🍕 Reference

자바 ORM 표준 JPA 프로그래밍 : 교보문고
자바 ORM 표준 JPA 프로그래밍 - 기본편 : 인프런

위 그림의 crateDate,updateDate,id와같이 공통적으로 들어가는 속성들을
일일히 모든 Entity 마다 넣는 수고스러움을 덜기 위해 사용하는 방식이다.

BaseEntity

@MappedSuperclass // Mapping 정보만 받는 class
public class BaseEntity
{
    @Id @GeneratedValue
    private Long id;
    private LocalDateTime createDate;
    private LocalDateTime modifiedDate;

}

공통적으로 사용하는 필드들을 BaseEntity에 필드로 넣고
@MappedSuperclass선언

Others

@Entity
public class Album extends BaseEntity
{
    private String artist;

----
@Entity
public class Book extends BaseEntity
{
    private String author;
    private String isbn;

---

@Entity
public class Movie extends BaseEntity
{
    private String director;
    private String actor;

BaseEntity 를 상속받는다

DDL

create table Album (
       id bigint not null,
        createDate timestamp,
        modifiedDate timestamp,
        artist varchar(255),
        primary key (id)
    )
Hibernate: 
    
    create table Book (
       id bigint not null,
        createDate timestamp,
        modifiedDate timestamp,
        author varchar(255),
        isbn varchar(255),
        primary key (id)
    )
Hibernate: 
    
    create table Movie (
       id bigint not null,
        createDate timestamp,
        modifiedDate timestamp,
        actor varchar(255),
        director varchar(255),
        primary key (id)
    )

@MappedSuperclass 는 공통적으로 사용되는 필드를 상속받아서 사용할 뿐
상속관계 Mapping 이 아니다.
Entity 가 존재하지 않기 때문에 당연히 Table도 존재하지 않는다.
직접 해당 객체를 생성하는 일이 없기 때문에 추상 class 로 만들어서 사용하는 것이 좋다.

0개의 댓글