공통 매핑 정보가 필요할 때 사용한다.( id, name 과 같은 )
: DB 에서는 다른 컬럼이지만 객체에서 반복적으로 사용될때 ( 귀찮음을 줄이기 위한 것 )
- 상속관계 매핑 불가.
- 엔티티, 테이블과 매핑이 불가하다
- 부모클래스를 상속 받는 자식 클래스에 매핑 정보만 제공한다.
- 조회, 검색이 불가(em.find(BaseEntity) X)
- 직접 생성해서 사용할 일이 없으므로 추상 클래스 권장
예시 ) 만약 Member와 Team 테이블에 생성한 사람, 생성날짜, 수정한 사람 , 수정 날짜 를 공통적으로 사용하고 싶다면?
1. BaseEntity 생성
package hellojpa;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@Getter
@MappedSuperclass
public abstract class BaseEntity {
private String createdBy;
private LocalDateTime createdDate;
private String modifiedBy;
private LocalDateTime lasModifiedDate;
}
2. BaseEntity를 extends 해준다.( 그럼 Member나 Team에서 createdBy 등을 명시하지않아도 사용 가능 )
/* Member.java */
@Entity
public class Member extends BaseEntity{
...
}
/* Team.java */
@Entity
public class Team extends BaseEntity{
...
}
결과
Member member = new Member();
member.setUsername("ej");
member.setCreatedBy("Park");
member.setCreatedDate(LocalDateTime.now());
em.persist(member);
- 테이블과 관계 없고 , 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할
- 주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용
★ @Entity 클래스는 엔티티나 @MappedSuperclass로 지정한 클래스만 상속 가능
'JAVA' 카테고리의 다른 글
[JAVA] 즉시로딩과 지연로딩 (0) | 2022.01.05 |
---|---|
[JAVA] 프록시 (0) | 2022.01.04 |
[JAVA] JPA 고급 매핑 (상속 관계 매핑) (0) | 2021.12.16 |
[JAVA] JPA 다양한 연관관계 매핑 (0) | 2021.12.09 |
[JAVA] JPA 연관관계 매핑( 양방향 ) (0) | 2021.11.17 |