• 主页
  • 归档
  • 分类
  • 照片墙
所有文章 友情链接 关于我

  • 主页
  • 归档
  • 分类
  • 照片墙
  1. 1. 命令行执行
  2. 2. 使用morphia的注解实现引用
    1. 2.1. 多对一关联
    2. 2.2. 一对多关联

5.2、关联映射

2018-01-27 19:37:03
总字数 542
预计阅读时间 2 分钟

在Maven项目中引入marphia的包

1
2
3
4
5
<dependency>
<groupId>org.mongodb.morphia</groupId>
<artifactId>morphia</artifactId>
<version>1.2.0</version>
</dependency>

mapping
maven会自动引入一些其他的依赖jar包 , 否则关联映射就无法正常执行


命令行执行

1
2
3
4
5
6
7
8
db.user.insert({
username:"test_user",
role : {
$ref:"role",
$id:ObjectId("576d47b8cc7a1342538343fc"),
$db:"model_db"
}
})

说明 : 在NoSQL型数据库当中 , 并不鼓励使用类似于关系型数据库的外键关联
但是为了程序的查询方便 , 提供了这种程序驱动可以识别的表示形式
其实并没有外键关联的检查 , 与普通的文档没有任何区别

使用morphia的注解实现引用

多对一关联

@Reference注解包含的属性

  • concreteClass - 关联的目标类
  • idOnly - 只保存从表的数据ID ( 与关系型数据库的外键字段类似 )
  • ignoreMissing - 忽略不能解决的引用
  • lazy - 懒加载 , 默认是false ( 在双向关联情况下 , 如果双端都不是懒加载 , 会形成死循环 )
  • value - 在集合中存储的字段名 , 默认是类中的属性名

角色表

1
2
3
4
5
6
7
8
@Entity(value="role")
public class Role {
@Id
private ObjectId id;
private String roleName;
private String remark;
//getter与setter方法
}

用户表

1
2
3
4
5
6
7
8
9
10
11
12
@Entity(value="user")
public class User {
@Id
private ObjectId id;
private String username;
private int age;
private boolean denger;

@Reference(value="roleId",idOnly=true)
private Role role;
//getter与setter方法
}

测试代码

1
2
3
4
5
6
7
8
9
User user = new User();
user.setUsername("papapa");

Role role = new Role();
role.setRoleName("测试角色2");

user.setRole(role);
ds.save(role);//ds -> Datastore
ds.save(user);

mapping

一对多关联

用法与多对一也是类似的 , 数据库中会在 一 的那端以数组形式保存数据

1
2
3
4
5
6
7
8
9
10
11
@Entity(value="role")
public class Role {
@Id
private ObjectId id;
private String roleName;
private String remark;

@Reference("user")
private List<User> users;
//getter与setter方法
}

测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Test
public void save(){
Role role = new Role();
role.setRoleName("测试角色2");
User user1 = new User();
user1.setUsername("pppp");

User user2 = new User();
user2.setUsername("oooo");

List<User> users = new ArrayList<User>();
users.add(user1);
users.add(user2);
userDao.save(user1);
userDao.save(user2);

role.setUsers(users);
roleDao.save(role);
}

mapping

  • 数据库
  • MongoDB
  • MongoDB

扫一扫,分享到微信

3.1、Docker(1)-初见
5.1、morphia 
© 2024 夏夜梦星辰
鲁ICP备19028444号
Power By Hexo
  • 所有文章
  • 友情链接
  • 关于我
{{searchItem.query}}
标签: 分类:
  • maven
  • 持续集成
  • JMS
  • 线程
  • JavaScript
  • ECMAScript6
  • 单元测试
  • Promise
  • Web Worker
  • 函数
  • prototype
  • 模块化
  • 正则表达式
  • 数据库
  • MongoDB
  • 索引
  • 集群
  • 全文检索
  • flutter
  • dart
  • git
  • 版本控制
  • linux
  • shell
  • docker
  • nginx
  • jenkins
  • opencv
  • vim
  • react
  • react native
  • 前端
  • css
  • HTML5
  • Hexo
  • sass
  • Three.js
  • TypeScript
  • Vue
  • 组件化
  • base64
  • webpack
  • nodejs
  • gulp
  • TensorFlow
  • 机器学习
  • 算法
  • 动态规划
  • 数据结构
  • Java
  • JavaScript
  • MongoDB
  • flutter
  • Git
  • linux
  • react
  • 前端杂烩
  • 男生女生
  • 算法
  • 十年饮冰,难凉热血
  • †少女癌†
  • 猫与向日葵
  • coderfun
  • JENKINS
  • API管理后台
愿你最终能接纳每一面每一种的自己
独自活着便是团圆