Mongodb 的ORM框架 Morphia 注解 之 @Reference

  引用对象

     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

          

    

你可能感兴趣的:(mongodb,框架,数据库,String,orm,reference)