본문 바로가기
프로그래밍/Back-end

JPA 상속관계 매핑 MappedSuperclass

by @GodWin 2024. 10. 11.

-

-
안녕하세요? 오늘은 JPA의 상속관계중에서, MappedSuperclass에 대해서 알아보도록 하겠습니다.

※ JPA의 상속관계 매핑에 대해서는 아래 포스팅을 참조 부탁드리겠습니다.

https://logger-debug.tistory.com/entry/JPA-%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91

 

JPA 상속관계 매핑

--안녕하세요? 오늘은, JPA의 고급매핑 중에서, 상속관계 매핑에 대해서 알아보도록 하겠습니다. -상속관계 매핑이란?: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑: @Ingeritance 를

logger-debug.tistory.com

 

-

@MappedSuperclass

 

: 공통 매핑 정보가 필요할 때 사용
: 부모 클래스를 상속받는 자식클래스에 매핑 정보만 제공
: 조회, 검색 불가
: 직접 생성 사용이 아닌, 추상 클래스 권장

상속관계가 전혀 아님
엔티티가 아님
> 테이블과 매핑이 안된다.





기준 공통 엔티티 생성)

@MappedSuperclass
public class BaseEntity {
  
  private String createdBy;
  private LocalDateTime createdDate;
  private String modifiedBy;
  private LocalDateTime modifiedDate;
  
}


EntityA 엔티티 생성)

@Entity
public class EntityA extends BaseEntity {
  
  @Id @GeneratedValue
  @Column(name = "ENTITYA_ID")
  private Long id;
  
  @Column(name = "ENTITYA_NAME")
  private String name;
  
  ...
  
}


EntityB 엔티티 생성)

@Entity
public class EntityB extends BaseEntity {
  
  @Id @GeneratedValue
  @Column(name = "ENTITYB_ID")
  private Long id;
  
  @Column(name = "ENTITYB_NAME")
  private String name;
  
  ...
  
}


샘플코드)

EntityManagerFactory emf = Persistence.createEntityManagerFactory("유닛명");
EntityManager em = emf.createEntityManager();

EntityTransaction tx = em.getTransaction();
tx.begin();

EntityA entityA = new EntityA();
entityA.setName("entityA_1");
entityA.setCreatedBy("Shin");
entityA.setCreatedDate(LocalDateTime.now());
entityA.setModifiedBy("Shin");
entityA.setModifiedDate(LocalDateTime.now());

em.persist(entityA);

tx.commit();



-
MappedSuperclass는 테이블과 관계가 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역활을 합니다.
주로, 등록일 / 수정일 / 등록자 / 수정자 같은, 전체 엔티티에서 공통으로 적용하는 정보를 모을때 사용합니다.

JPA에서 @Entity 클래스는, 같은 Entity나 MappedSuperclass로 지정한 클래스만 상속이 가능합니다.


오늘은 JPA의 상속관계중에서, MappedSuperclass에 대해서 알아보았습니다.
그럼 오늘도 즐거운 하루 되시길 바라겠습니다.