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

  • Post author:
  • Post category:其他


@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