JPA @MappedSuperClass
@MappedSuperClass
複数のオブジェクト/テーブルに共通の情報がある場合、プレゼンテーションでは、これらのオブジェクト/テーブルにColumnを簡単に作成できます.
これは、リレーションシップマッピングを継承するのではなく、継承した親の子クラスにのみマッピング情報を提供します.
検索、検索不可
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デモを追加します.
子クラスがextendsとして親クラス(BaseEntity)を継承すると、親クラスのカラムが子クラスに自動的に追加されます.
親クラスのテーブルは作成されません.したがって,@MappedSuperClassは継承関係マッピングとは異なる**
Reference
この問題について(JPA @MappedSuperClass), 我々は、より多くの情報をここで見つけました https://velog.io/@k_ms1998/JPA-MappedSuperClassテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol