morphia CompoundでUniqueなIndexを作成する


MongoDB に morphia を使用してアクセスするコードを書いていて、
Compound で Unique な Index を作成しようとしたら、
Index アノテーションの変数が非推奨になっていて、
非推奨マークが出ないように記述するのに、少しばかり調べた結果、
以下のような感じになりました。というメモ書きです。


Entity クラスのコード


package xyz.monotalk.models.mongo.entity;

import lombok.Data;
import org.bson.types.ObjectId;
import org.mongodb.morphia.annotations.Entity;
import org.mongodb.morphia.annotations.Field;
import org.mongodb.morphia.annotations.Id;
import org.mongodb.morphia.annotations.Index;
import org.mongodb.morphia.annotations.IndexOptions;
import org.mongodb.morphia.annotations.Indexes;

/**
 * @author Kem
 */
@Data
@Entity
@Indexes({
    @Index(options = @IndexOptions(name = "natualPrimaryKeys", unique = true), fields = {
        @Field("festivalId"),
        @Field("artistTagId"),
        @Field("artistName")})
})
public class SearchTargetArtist {

    @Id
    private ObjectId id;
    private Integer festivalId;
    private Integer artistTagId;
    private String artistName;
}

説明


  1. Index アノテーションの変数 options に IndexOptions アノテーションを指定
  2. IndexOptions アノテーションの変数 unique には true を指定
  3. Index アノテーションの変数 fields に複合インデックスにするカラムを Field アノテーションで指定する

これで、アノテーションの記述は OK で、
あとは、コード上のどこかで、

Datastore#ensureIndexes(SearchTargetArtist.class);
を呼び出すと対象の Index が作成されました。


補足


morphia の version は v1.0.0を使用しています。

コメント