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

时间:2021-01-05 08:44:09

@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注解的所有字段创建索引。

 

     你可以在 http://www.mongodb.org/display/DOCS/Indexes 了解更多关于MongoDB索引的信息。

 

 

  @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 

 

 

英语水平有限,敬请大师斧正

原文:http://code.google.com/p/morphia/wiki/EntityAnnotation