🍋

JPAの@MappedSuperclassとは

2022/05/22に公開

@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)

https://zenn.dev/dev_yoon/articles/6a83e1da498e97

Discussion