🍋
JPAの@MappedSuperclassとは
@MappedSuperclass
@MappedSuperclass
は継承関係マッピングと関係ないです。
共通のマッピング情報が必要なとき使用します。
* ex)id
, name
などなど
@MappedSuperclass
を使用すると
テーブルとして使用されるのではなく共通属性だけを下すときの使用します。
直接インスタンスを生成して使う必要があるエンティティではないため抽象クラスで作るべきです。
下の生成情報を全てのテーブルに追加するとしたら?
BaseEntity.java
@MappedSuperclass
public abstract class BaseEntity {
private String createdBy;
private LocalDate createdDate;
private String lastModifiedBy;
private LocalDateTime lastModifiedDateTime;
}
Item.java
@Entity
public class Item extends BaseEntity { ... }
まとめ
まとめるとテーブルと関係なく、単純にエンティティが共通に使用するマッピング情報を集める役割。
-
@MappedSuperclass
は照会、検索不可である(em.find(BaseEntity.class)
できません)。 - 親クラスを継承した子クラスにマッピング情報だけを提供
- 主に登録日、修正日、修正者みたいな全体のエンティティで共通に適用する情報を集めるときに使用します。
次(@Inheritance)
Discussion