Mongodb 的ORM框架 Morphia 注解 之 @Reference

            

[java] view plain copy
 
  1. public class BlogEntry {  
  2.   
  3.     private String title;  
  4.     private Date publishDate;  
  5.     private String body;  
  6.   
  7.     private Author author;  
  8.   
  9.     // getters and setters  
  10. }  
  11.   
  12. ...  
  13.   
  14. public class Author {  
  15.   
  16.     private String username;  
  17.     private String fullName;  
  18.     private String emailAddress;  
  19.   
  20.     // getters and setters  
  21. }  

       这里的一个问题就是:我们如果注解BlogEntry中的author属性?当然,我们可以是用@Embedded注解,但是这样就没什么意义了,因为在没个BlogEntry实例中都保存一个Author

 

  对象。我们反而想在多个blog实例中引用一个单独的Author文档(对象)在Mongo中。

       在这种情况下我们使用 @Reference注解

         

[java] view plain copy
 
  1. import com.google.code.morphia.annotations.Entity;  
  2. import com.google.code.morphia.annotations.Embedded;  
  3. import com.google.code.morphia.annotations.Id;  
  4. import com.google.code.morphia.annotations.Reference;  
  5. import com.google.code.morphia.annotations.Property;  
  6.   
  7. @Entity  
  8. public class BlogEntry {  
  9.   
  10.     @Id  
  11.     private ObjectId id;  
  12.   
  13.     private String title;  
  14.     private Date publishDate;  
  15.     private String body;  
  16.   
  17.     @Reference  
  18.     private Author author;  
  19.   
  20.     // getters and setters  
  21. }  
  22.   
  23. ...  
  24.   
  25. @Entity  
  26. public class Author {  
  27.   
  28.     @Id  
  29.     private ObjectId id;  
  30.   
  31.     private String username;  
  32.     private String fullName;  
  33.     private String emailAddress;  
  34.   
  35.     // getters and setters  
  36. }  

        当使用引用时有很重要的一点我们必须提及:被引用的对像在被引用之前必须已经保存到了MongoDB数据库中。

 

        这个真的的意思是。就像上面的例子,在你创建一个BlogEntry对象之前,一个Author已经被保存到了数据库中。

        默认情况下,Morphia使用属性名作为在数据库中保存的值。当然这个可以在@Reference注解中指定。

        

[java] view plain copy
 
  1. @Reference("blog_authors")  
  2.     private List<Author> authors;  

    

 

     补充:注解使用的参数。

            concreteClass: 指定具体的实体类。

            ignoreMissing:  忽略任何不能解决的参考。

            lazy:             为参考创建一个代理,这个将在第一次调用时加载(类似hibernate中的lazy属性)

            value:              指定在Mongo中存储的属性名。

 

 

   原文连接:http://code.google.com/p/morphia/wiki/ReferenceAnnotation

 
posted @ 2017-03-09 00:33  侧耳倾听的世界  阅读(568)  评论(0编辑  收藏  举报