libro
www.tuyano.com
Slim3によるGAE/J開発入門

モデル(エンティティ)の作成 (2/5)

作成:2013-12-14 10:35
更新:2013-12-14 10:35

■モデルのソースコードをチェックする!

では、作成されたMyData.javaのソースコードを見てみましょう。デフォルトでは、下にあるリストのようなものが自動生成されています(コメントをカットするなど一部手を加えてあります)。

モデルクラスは、SeriarizableなだけのPOJOなクラスとして定義されています。ただし、クラス定義の前に以下のようなアノテーションが付いていることに気がついたことでしょう。
@Model(schemaVersion = 1)

この@Modelは、Slim3によって用意されるものです。Slim3のモデルは、すべてこの@Modelをつけることで、これがエンティティクラスであることがわかるようにしておきます。クラス内には、2つのプロパティ(フィールドとアクセサメソッド)が用意されていますね。以下のものです。

●キーのプロパティ
@Attribute(primaryKey = true)
private Key key;
エンティティの識別に用いられる、いわゆるプライマリキーとなる項目です。Slim3のモデルでは、キーにはcom.google.appengine.api.datastoreパッケージのKeyクラスが自動設定されます。これはGAEのデータストアで用いられる標準的なキーです。データストア自体は、Keyだけでなく、例えばID番号を示す整数値などをキーにしたりできますが、Slim3ではKeyが基本だと考えてください。勝手にlong値などにキーを変更したりしないようにしましょう。

この@Attribute(primaryKey = true)により、このフィールドがプライマリキーであることがSlim3にわかります。

●バージョン情報
@Attribute(version = true)
private Long version;
オブジェクトのバージョン情報を示すプロパティです。これも@Attribute(version = true)というSlim3に用意されているアノテーションが自動的に付けられます。

このバージョン情報プロパティは、Slim3がオブジェクトを更新したりする際に用いられます。実際にやってみるとわかりますが、エンティティのオブジェクトの内容を変更して保存したりすると、自動的にバージョン番号が上がっていくようになっているのです。

ただし、このバージョン管理の仕組みはSlim3自体に組み込まれていますので、私たちがバージョン管理を意識してコードを書いたりすることはまずありません。あまり気にしなくて大丈夫です。


――他、ハッシュを取得するhashCodeやString表現を返すtoStringなどのメソッドが自動生成されています。まぁ、これらはオブジェクトの基本ですので説明の要はないでしょう。ただ、これらのデフォルト生成されるコードでは、ちゃんとKeyとVersionの値によってハッシュやテキストが生成されるようになっている、ということは知っておくとよいでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※MyData.java

package com.tuyano.libro.myslim3app.model;

import java.io.Serializable;
import com.google.appengine.api.datastore.Key;
import org.slim3.datastore.Attribute;
import org.slim3.datastore.Model;

@Model(schemaVersion = 1)
public class MyData implements Serializable {

    private static final long serialVersionUID = 1L;

    @Attribute(primaryKey = true)
    private Key key;

    @Attribute(version = true)
    private Long version;

    public Key getKey() {
        return key;
    }

    public void setKey(Key key) {
        this.key = key;
    }

    public Long getVersion() {
        return version;
    }

    public void setVersion(Long version) {
        this.version = version;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((key == null) ? 0 : key.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        MyData other = (MyData) obj;
        if (key == null) {
            if (other.key != null) {
                return false;
            }
        } else if (!key.equals(other.key)) {
            return false;
        }
        return true;
    }
}

※関連コンテンツ

「Slim3によるGAE/J開発入門」に戻る