zoukankan      html  css  js  c++  java
  • 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

     
  • 相关阅读:
    大数据实际应用及业务架构
    Hadoop 2.x 生态系统及技术架构图
    网站推广,经验分享
    生成数据字典
    检查sql执行效率
    DBobjectsCompareScript(数据库对象比较).sql
    秒杀多线程第一篇 多线程笔试面试题汇总
    二叉树基本操作(C++)
    生成器模式Builder
    delphi接口(抄自万一)
  • 原文地址:https://www.cnblogs.com/qianxinxu/p/6523727.html
Copyright © 2011-2022 走看看