JPA/JPA 기본

25. Mapped Superclass 매핑 정보 상속

sdafdq 2023. 10. 27. 06:56

일단 이거는 전에 배웠던 상속관계 매핑과는 별로 관계가 깊지 않다.

 

이거는 뭐냐면,

그러니까 좀 완전 다른?

다른 테이블인데, 

 

객체상에서만 속성만 상속 받아서 쓰고 싶은 경우.

뭐 이런 경우..

 

Member Seller 완전 다른 테이블이지만, 객체상에서는 상속 받아서 쓰고 싶다.

 

왜냐하면 저렇게 id나 name같은 거 중복 있으면 저런 게 여러 개 있으면 귀찮으니까.

 

 

그러니까, 뭐 상속받는다 그런 거 보다는,

공통적인 것을 사용하고 싶을 때.

공통적인 매핑 정보가 있을 때 사용한다.

 

꽤 자주 사용하는 모양이다.

뭐 하긴 게임오브젝트로 생각하면 유용할 것 같기는 하다.

 

코드

@MappedSuperclass
public abstract class BaseEntity {
    private String createdBy;
    private LocalDateTime createdDate;
    private String lastModifiedBy;
    private LocalDateTime lastModifiedDate;
}

@MappedSuperclass 해서 매핑정보만 주는 클래스라는 걸 명시해준다.

 

@Entity
public class Users extends BaseEntity{
    @Id
    @GeneratedValue
    private Long id;

    private String name;
}

상속 받아서 쓰면 된다. (users로 한 건 user가 쿼리문에서 뭔가 의미가 있는지 저 쪽에서 문법에러가 나서 users로 했다.)

 

@Entity
public class Seller extends BaseEntity{
    @Id
    @GeneratedValue
    private Long id;

    private String shopName;
}

 

이렇게 하면 테이블이

Hibernate: 
    create table Users (
        createdDate timestamp(6),
        id bigint not null,
        lastModifiedDate timestamp(6),
        createdBy varchar(255),
        lastModifiedBy varchar(255),
        name varchar(255),
        primary key (id)
    )
Hibernate: 
    create table Seller (
        createdDate timestamp(6),
        id bigint not null,
        lastModifiedDate timestamp(6),
        createdBy varchar(255),
        lastModifiedBy varchar(255),
        shopName varchar(255),
        primary key (id)
    )

이렇게 자동으로 만들어 진다.

 

참고로, 

얘는 엔티티가 아니다. 즉, 테이블이랑 매핑된 애가 아니다. 그래서 가상 클래스로 하는 게 좋다. (당연히 ddl.auto에 의해 자동생성도 돼지 않는다.)

 

그냥 공통으로 사용할 매핑정보만 모으는 용도이다.

 

테이블이 없으므로, 저 BaseEntity로 조회등도 불가능 하다. em.find(BaseEntity)한다든지.

 

직접 생성할 일이 없어서, 추상클래스로 하는 게 좋다.

 

@Entity 클래스는, @Entity나 @MappedSuperclass로 지정한 클래스만 상속 가능 하다.

 

 

'JPA > JPA 기본' 카테고리의 다른 글

28. 즉시로딩, 지연로딩  (0) 2023.10.28
27. 프록시  (0) 2023.10.27
24. 상속관계 매핑  (0) 2023.10.26
23. 실전3 다양한 연관관계 매핑  (0) 2023.10.25
22. N : M 다대다 연관관계  (0) 2023.10.25