HyeLog
[김영한_자바 ORM 표준 JPA 프로그래밍 - 기본편] 6. 고급 매핑(MappedSuperclass) 본문
웹 개발/Spring Boot
[김영한_자바 ORM 표준 JPA 프로그래밍 - 기본편] 6. 고급 매핑(MappedSuperclass)
shj718 2022. 6. 17. 15:19@MappedSuperclass 란?
@MappedSuperclass 는 공통 매핑 정보가 필요할 때 사용한다. 예를 들어, 거의 모든 테이블에 등록자, 등록일, 수정자, 수정일(createdBy, createdDate, modifiedBy, modifiedDate) 컬럼이 필요하다. 이 공통 컬럼들만 모아서 따로 하나의 클래스를 만들고 @MappedSuperclass 어노테이션을 붙이면, 각 테이블마다 공통 컬럼들이 생기게 된다.
이때 중요한 사실은 @MappedSuperclass 는 상속관계 매핑이 아니라는 점이다. 단순히 공통된 매핑정보를 묶기 위해서 사용한다. 따라서, 해당 클래스는 테이블이 만들어지지 않는다. 그래서 추상 클래스로 만드는 것을 권장한다.
코드를 보면, BaseEntity 클래스에 @MappedSuperclass 를 붙이고 다른 엔티티들이 이것을 extend 하고 있다.
@MappedSuperclass
public abstract class BaseEntity {
private String createdBy;
private LocalDateTime createdDateTime;
private String lastModifiedBy;
private LocalDateTime lastModifiedDateTime;
// getter(), setter()
}
@Entity
public class Member extends BaseEntity {
@Entity
public class Team extends BaseEntity {
실행해보자.
Team team = new Team();
team.setName("teamA");
team.setCreatedBy("hongik");
team.setCreatedDateTime(LocalDateTime.now());
em.persist(team);
Member member = new Member();
member.setUsername("shj");
member.setCreatedBy("admin");
member.setCreatedDateTime(LocalDateTime.now());
member.changeTeam(team);
em.persist(member);
transaction.commit();
결과를 보면, Team 테이블과 Member 테이블에 모두 공통 컬럼(등록자, 등록일, 수정자, 수정일)이 생겼다.
👩💻 실무에서 BaseEntity에 공통 매핑 정보를 넣는 기술은 많이 사용되므로 기억해두자. 👩💻
'웹 개발 > Spring Boot' 카테고리의 다른 글
[김영한_자바 ORM 표준 JPA 프로그래밍 - 기본편] 7. CASCADE와 고아 객체 (0) | 2022.06.18 |
---|---|
[김영한_자바 ORM 표준 JPA 프로그래밍 - 기본편] 7. 프록시와 연관관계 관리 (0) | 2022.06.17 |
[김영한_자바 ORM 표준 JPA 프로그래밍 - 기본편] 6. 고급 매핑(상속관계 매핑) (0) | 2022.06.14 |
[김영한_자바 ORM 표준 JPA 프로그래밍 - 기본편] 5. 다양한 연관관계 매핑 (0) | 2022.06.12 |
[김영한_자바 ORM 표준 JPA 프로그래밍 - 기본편] 4. 연관관계 매핑 기초 (0) | 2022.06.11 |