@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