JPA @MappedSuperClass

KMS·2022년 4월 6일
0

JPA Basics

목록 보기
9/20
post-thumbnail

@MappedSuperClass

여러 객체/테이블에 공통으로 들어가는 정보들이 있을때, 해당 Column들을 해당 객체/테이블들에 쉽게 생성할 수 있게 해주는 애노테이션

상속관계 매핑이 아니며, 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공합니다.
조회, 검색 불가(em.find(BaseEntity) 불가)

BaseEntity

@MappedSuperclass
public abstract class BaseEntity{

    private String createdBy;
    private LocalDateTime createdDate;
    private String lastModifiedBy;
    @Column(name = "update_date") //@Column 애너테이션을 통해 BaseEntity를 상속받는 모든 테이블들의 lastModifiedDate column을 필요한 대로 한번에 바꿀수 있음
    private LocalDateTime lastModifiedDate;

    public String getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    public LocalDateTime getCreatedDate() {
        return createdDate;
    }

    public void setCreatedDate(LocalDateTime createdDate) {
        this.createdDate = createdDate;
    }

    public String getLastModifiedBy() {
        return lastModifiedBy;
    }

    public void setLastModifiedBy(String lastModifiedBy) {
        this.lastModifiedBy = lastModifiedBy;
    }

    public LocalDateTime getLastModifiedDate() {
        return lastModifiedDate;
    }

    public void setLastModifiedDate(LocalDateTime lastModifiedDate) {
        this.lastModifiedDate = lastModifiedDate;
    }
}

자식 클래스: Order

@Entity
@Table(name = "ORDERS")
public class Order extends BaseEntity{

   @Id
   @GeneratedValue() //Default strategy = auto
   @Column(name = "ORDER_ID")
   private Long id;

   @OneToOne
   @JoinColumn(name = "DELIVERY_ID")
   private Delivery delivery;

   @ManyToOne // N:1 관계; Member가 여러개의 주문을 할 수 있지만, 주문서는 하나의 Member랑만 연관 되어 있음
   @JoinColumn(name = "MEMBER_ID") // ... member m JOIN orders o ON m.MEMBER_ID = o.MEMBER_ID;
   private Member memberId; // memberId에 Member 객체 자체를 주입 함

   private LocalDateTime orderDate;

   @Enumerated(value = EnumType.STRING)
   private OrderStatus status;

   @OneToMany(mappedBy = "orderId")
   private List<OrderItem> orderItemList = new ArrayList<>();

   public Long getId() {
       return id;
   }

   public void setId(Long id) {
       this.id = id;
   }

   public Member getMemberId() {
       return memberId;
   }

   public void setMemberId(Member memberId) {
       this.memberId = memberId;
   }

   public LocalDateTime getOrderDate() {
       return orderDate;
   }

   public void setOrderDate(LocalDateTime orderDate) {
       this.orderDate = orderDate;
   }

   public OrderStatus getStatus() {
       return status;
   }

   public void setStatus(OrderStatus status) {
       this.status = status;
   }
}

부모 클래스인 BaseEntity 객체를 만들고, @MappedSuperClass 애노테이션을 추가해줍니다.
자식 클래스가 부모 클래스(BaseEntity)를 extends로 상속 받으면, 자동으로 부모 클래스의 column들이 자식 클래스에 추가됩니다.

이때, 부모 클래스에 대한 테이블은 생성이 되지 않습니다. 그렇기 때문에, @MappedSuperClass는 상속 관계 매핑과는 다른 개념입니다.**

profile
Student at Sejong University Department of Software

0개의 댓글