Mongodb 的ORM框架 Morphia 注解 之 @Reference

20 篇文章 0 订阅
9 篇文章 0 订阅

  引用对象

     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

          

    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值