1. 程式人生 > >Mongodb 的ORM框架 Morphia 註解三 —— @Indexed And @Embedded

Mongodb 的ORM框架 Morphia 註解三 —— @Indexed And @Embedded

@Indexed

   此註解是為某個欄位申請一個索引。 當datastore.ensureIndexes() 方法被呼叫時 這些索引就會被申請.. 更多如下:

       把@Indexed註解在你想讓MongoDB建立索引的屬性上。

           @Entity

          public class Product {

               @Id

             private ObjectId id;

              @Indexed(value=IndexDirection.ASC, name="upc", unique=true, dropDups=true)

              private String upcSymbol;

                 .......

        }

   引數說明如下:

   value: 表名這個索引的方向; IndexDirection.ASC(升序),IndexDirection.DESC(降序), IndexDirection.BOTH(兩者)

             預設為 升序;

   name: 被建立的索引的 名稱; mongodb預設建立的索引名的格式為(key1_1/-1_key2_1)

   unique: 建立一個唯一索引,當建立唯一索引後,當在此欄位插入相同的值時將會報錯。true:為唯一索引;false:不是唯一索引。

                 預設為:false

   dropDups:此引數表明,當為某個欄位建立唯一索引時,刪除其他相同值的記錄。只保留第一條記錄。true:刪除重複,

                      false:不刪除重複(當有重複值時唯一索引建立失敗);預設為false.

         向MongoDB申請建立索引 Datastore.ensureIndexes()需要被呼叫。這個方法應該在你已經使用Morphia註冊了你的實體類後

   被呼叫。他將會非同步建立你的所有索引。 這個動作也許會在你每次啟動你的應用時都被執行。

     注意:當在一個存在的系統上,建立已經存在的索引時,將不會花費任何事件(也不會做任何事情)。

        Morphia m = .....

        Datastore ds = ....

      m.map(Product.class);

      ds.ensureIndexes();  //為被@Indexed註解的所有欄位建立索引。

  @Embedded

       你可以建立一個類被巢狀在實體類中,在這種情況下我們可以使用@Embedded註解。例如,在Hotel類中 可能會有一個Address。

     Address是Hotel不可分割的一部分,沒有ID, 並且不會被儲存在分開的collection中。在這種情況下我們可以使用@Embedded註解

   Address.

      @Entity

      public class Hotel{

        ...

        @Id

       private ObjectId id;

       @Embedded

       private Address address;

       ...

      } 

      @Embedded

    public  class Address{

        ...

     }

  正如你所看到的,被@Embedded註解的類沒有@Id。 這是因為他們經常被巢狀在其他類中。事實上,被@Embedded註解的類也不允許有@Id 

英語水平有限,敬請大師斧正