【PlayFramework 2.5】Ebeanでフィールドを継承する方法

 EbeanORMは、クラスにフィールドを定義すれば自動的にテーブルを作成したり書き換えてくれたりする便利なものです。

 今回は、タイムスタンプなど、全てのテーブルで共通して利用できるフィールドを作成してみましょう。

スーパークラスを定義する

 共通項目を定義していきます。候補としては、各種タイムスタンプなどが挙げられます。

  • createdDate
  • modifiedDate
  • deletedDate

 このあたりはよくある項目ですね。それでは、実際にモデルを定義してみましょう。

package models;

import javax.persistence.*;
import java.sql.*;

import com.avaje.ebean.Model;

@MappedSuperclass
public class AbstractModel extends Model {

    Timestamp createdDate;

    Timestamp modifiedDate;

    Timestamp deletedDate;

}

 これがmodelクラスのスーパークラスとなります。

 @MappedSuperclassアノテーションが付与されたクラスは、フィールドが継承先のテーブルに反映されるようになります。

試してみる

 それでは、実際にAbstractModelを継承して、新しいmodelクラスを作ってみましょう。

package models;

import java.util.*;
import javax.persistence.*;
import javax.validation.constraints.NotNull;

import com.avaje.ebean.Model;
import play.data.format.*;
import play.data.validation.*;

@Entity
public class User extends AbstractModel {

    @Id
    public Long id;

    @NotNull
    @Column(unique=true)
    public String userName;

    @NotNull
    public String password;

    @NotNull
    public String fullName;

    public static Finder<Long, User> find = new Finder<Long,User>(User.class);
}

 アプリケーションをリロードすると、親クラスから先ほど定義したフィールドが継承されていることが分かります。

まとめ

 タイムスタンプなどの項目は、殆ど全てのテーブルに必要な項目なので、こうして親クラスで纏めて定義できるのは便利ですね。

 うまく使ってコーディングのコスト削減を目指していきたいものです。