引用对象
Mongo在同一个数据库引用一个文档(对象)到另一个。考虑一下类:
public class BlogEntry { private String title; private Date publishDate; private String body; private Author author; // getters and setters } ... public class Author { private String username; private String fullName; private String emailAddress; // getters and setters }这里的一个问题就是:我们如果注解BlogEntry中的author属性?当然,我们可以是用@Embedded注解,但是这样就没什么意义了,因为在没个BlogEntry实例中都保存一个Author
对象。我们反而想在多个blog实例中引用一个单独的Author文档(对象)在Mongo中。
在这种情况下我们使用 @Reference注解
import com.google.code.morphia.annotations.Entity; import com.google.code.morphia.annotations.Embedded; import com.google.code.morphia.annotations.Id; import com.google.code.morphia.annotations.Reference; import com.google.code.morphia.annotations.Property; @Entity public class BlogEntry { @Id private ObjectId id; private String title; private Date publishDate; private String body; @Reference private Author author; // getters and setters } ... @Entity public class Author { @Id private ObjectId id; private String username; private String fullName; private String emailAddress; // getters and setters }当使用引用时有很重要的一点我们必须提及:被引用的对像在被引用之前必须已经保存到了MongoDB数据库中。
这个真的的意思是。就像上面的例子,在你创建一个BlogEntry对象之前,一个Author已经被保存到了数据库中。
默认情况下,Morphia使用属性名作为在数据库中保存的值。当然这个可以在@Reference注解中指定。
@Reference("blog_authors") private List<Author> authors;
补充:注解使用的参数。
concreteClass: 指定具体的实体类。
ignoreMissing: 忽略任何不能解决的参考。
lazy: 为参考创建一个代理,这个将在第一次调用时加载(类似Hibernate中的lazy属性)
value: 指定在Mongo中存储的属性名。
原文连接:http://code.google.com/p/morphia/wiki/ReferenceAnnotation