BaseObjectには全てのモデルに対して必須な属性が3つあります。
- id : レコードのID、値はデータベースが作成します :
AUTO_INCREMENT - created_at : レコードの作成時間、値はデータベースが作成します:
DEFAULT CURRENT_TIMESTAMP - updated_at : レコードの最新変更時間、、値はデータベースが作成し、更新します:
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
アプリケーションのモデルはBaseObjectから受け継ぎますので上記の属性を再度定義する必要ありません。
@MappedSuperclass: BaseObject の属性はこのクラスから受け継ぐ子クラスのmappingに適用されます。DBにはこの対象用のテーブルがありません。
@Data
@MappedSuperclass
public abstract class BaseObject implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", columnDefinition = "INT(11)")
private long id;
@Column(name = "created_at", updatable = false, columnDefinition = "TIMESTAMP default CURRENT_TIMESTAMP")
private Date createdAt;
@Column(name = "updated_at", columnDefinition = "TIMESTAMP default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP")
private Date updatedAt;
}