Mongodb 的ORM框架 Morphia 注解 之 @Reference
- 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 的ORM框架 Morphia 注解 之 @Reference的更多相关文章
- Mongodb 的ORM框架 Morphia之注解
@Entity("bands") public class Band { @Id ObjectId id; String name; String genre; @Referenc ...
- MongoDB的ORM框架——Morphia
1.引入pom <dependency> <groupId>org.mongodb.morphia</groupId> <artifactId>morp ...
- Morphia - mongodb之ORM框架
一.简介 二.注解 1.@Entity 2.@Id3.@Indexed4.@Embedded5.@Transient和@Property6.@Reference 三.示例 四.参考资料 Morphia ...
- 基于java注解实现自己的orm框架
ORM即Object Relation Mapping,Object就是对象,Relation就是关系数据库,Mapping映射,就是说Java中的对象和关系数据库中的表存在一种对应关系. 现在常见的 ...
- (动态模型类,我的独创)Django的原生ORM框架如何支持MongoDB,同时应对客户使用时随时变动字段
1.背景知识 需要开发一个系统,处理大量EXCEL表格信息,各种类别.表格标题多变,因此使用不需要预先设计数据表结构的MongoDB,即NoSQL.一是字段不固定,二是同名字段可以存储不同的字段类型. ...
- mongoose-面向对象操作mongodb的Nodejs框架
介绍 无论是mysql还是mongodb,传统的与数据库交互的方式都是按照他们提供的API来写代码.它们提供的API往往不是很容易理解,而且难以记忆,如果传错了参数,写错一个符号都要查文档. ORM( ...
- 最好的5个Android ORM框架
在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...
- [Android]Android端ORM框架——RapidORM(v2.0)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5626716.html [Android]Android端ORM ...
- 轻量级ORM框架初探-Dapper与PetaPoco的基本使用
一.EntityFramework EF是传统的ORM框架,也是一个比较重量级的ORM框架.这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择. 1.1 准备一张数据库 ...
随机推荐
- Python基础之set集合与函数
set集合 集合是一个无序且不重复的元素组合,以大括号表示.使用详情: >>> b=set(a) >>> type(b) <class 'set'> & ...
- iframe重定向让父页面跳转
情景描述 我们在使用一些后台程序的html模板(比如H-ui)的时候,这些html前端程序是iframe版的, 也就是说在使用的时候,每当我点击左侧导航栏的一个按钮,在右侧就会弹出一个菜单栏,在显示的 ...
- topK问题
概述 在N个乱序数字中查找第K大的数字,时间复杂度可以减小至O(N). 可能存在的限制条件: 要求时间和空间消耗最小.海量数据.待排序的数据可能是浮点型等. 方法 方法一 对所有元素进行排序,之后取出 ...
- CEIWEI USBMonitor监控驱动 OCX/SDK USB 监控精灵 USB过滤驱动
CEIWEI USBMonitor监控精灵软件SDK USBMonitorX.dll SDK,能够嵌入到你的App程序中,从而在你的App中实现USB端口协议分析.调试USB设备的协议信息,并可以拦截 ...
- Direct2D 学习笔记(1)概述
Direct2D 应用程序接口概述 资源网站 https://docs.microsoft.com/en-us/windows/win32/Direct2D/the-direct2d-api 主要用到 ...
- Learning to Rank:pointwise, pairwise, listwise 总结
值得看: 刘铁岩老师的<Learning to Rank for Information Retrieval>和李航老师的<Learning to rank for informat ...
- 《ucore lab1 exercise3》实验报告
资源 ucore在线实验指导书 我的ucore实验代码 题目:分析bootloader进入保护模式的过程 BIOS将通过读取硬盘主引导扇区到内存,并转跳到对应内存中的位置执行bootloader.请分 ...
- Redis 常用命令学习二:字符串类型命令
1.赋值与取值命令 127.0.0.1:6379> set foo helloredis OK 127.0.0.1:6379> get foo "helloredis" ...
- ARTS第六周打卡
Algorithm : 做一个 leetcode 的算法题 1.合并两个排序链表 2.树的子结构 3.二叉树的镜像 4.包含Min函数的栈 5.栈的压入.弹出 6.二叉搜索树的后序遍历 7.从上往下打 ...
- 正则与re模块
一.正则表达式 在线测试工具 http://tool.chinaz.com/regex/ 1.字符组 在同一个位置可能出现的各种字符组成一个字符组,在正则表达中用[ ]表示 一个正则就是一条匹 ...