当前位置: 首页 > 面试题库 >

具有Java外键的MongoDb

司徒高寒
2023-03-14
问题内容

我需要使用Java在MongoDB中保存两个集合。其中一个集合是 部门 ,另一个集合雇员
。一个部门可以有很多员工的地方,我想保存一个集合,例如必须将员工唯一ID映射到我的部门员工列表中。

例:

{
    "_id" : ObjectId("598da19250aa4ad2413d4bc0"),
    "_class" : "com.department",
    "departmentName" : "SAQ-A",
    "departmentNumber" : "3_2",
    "employee" : [ 
           "id" : "1",
           "id" : "2",
           "id" : "3"
     ]
}

我可以知道使用Java在MongoDB中实现它的方式是什么吗?


问题答案:

通过提供的文档和标签,我假设您正在使用spring数据来处理mongodb。因此,在这里您可能要使用DBRef将员工绑定到部门中。幸运的是,Spring
Data
为您提供了@DBRef注释。

员工类别:

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document
public class Employee {

    @Id
    private Integer id;
    ...

}

部门课:

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;

@Document
public class Department {

    @Id
    private String id;

    @DBRef
    private Collection<Employee> employees;
    ...
}

MongoDB文件:

{
    "_id" : ObjectId("598dc04ac4fdd0e29867ccbb"),
    "_class" : "foo.bar.Department",
    "employees" : [ 
        {
            "$ref" : "employee",
            "$id" : 1
        }, 
        {
            "$ref" : "employee",
            "$id" : 2
        }
    ]
}

注意:
员工实例必须已经存在于MongoDB中。DBRef不会以层叠样式保存雇员。看看这篇关于级联的文章。



 类似资料:
  • 我有一个实体,它的复合主键由两个字段组成,其中一个也是复合外键的一部分。 背景:我有实体<代码>人员 、<代码>区域 和<代码>会话 。 与具有多对多关系,使用称为“和实体。 所以,我有,主键为(,)。本身是的外键。 也有一个字段。我希望(,)是的复合外键。 我的PersonSession代码: } 这看起来不错,它在数据库中创建了所有正确的关系。当我尝试插入个性化会话对象时,问题就出现了——ar

  • 问题内容: 我是Java图形和线程的新手,我正在尝试制作一个游戏(特别是Pong)。这个想法是两个人可以在同一个键盘上玩(即,有两个通过不同键控制的拨盘)。目前,两个玩家都无法同时移动其球拍。 有针对这个的解决方法吗?单独的线程是答案吗? 如果可能的话,我希望这些拨片能够同时(至少在表面上)移动。 更新:似乎使用存储按下的键是最好的选择。我已经做到了(并且可以正常工作),但是我想知道是否其中的任何

  • 我知道这个主题在这里讨论了很多次,但我仍然坚持一个例外:外键必须与引用的主键具有相同的列数。 (我正在使用spring数据和hibernate) 我的身份证类别: 我的实体: 对于这种构造,我得到以下例外情况: 导致:org.hibernate.MappingException:外键(FK_ad3h9gu4labg6ix34bei3poxt:proxy_dienst_关系[parent_diens

  • 问题 如果我像下面的例子一样使用属性访问类型,我是否也必须为引用的FK定义getter和setter? 我不认为是这样,但Java EE6的官方文档是这样做的。 null

  • 问题内容: 只是为了扩展我以前的问题-我的数据库中有两个表,我想提取某些信息。下表: 您向我提供了以下代码来获取播放器的名称: 效果很好,谢谢-我只想进行两项调整: 我想返回得分手的名字以及球员的名字。由于m.scorer是一个ID,如果p.Name已被映射到m.playerID,我如何将其映射到p.Name属性? 上面的查询返回所有玩家的姓名。我很快就会添加搜索功能,您可以在其中搜索特定玩家的所

  • 问题内容: 我有本身具有外键的表。列 parentid 是外键, 不能 为NULL。 如果我这样做,那么它说不能将NULL插入 父母的父母 。但是,如果还没有插入行,我可以为它设置什么值呢? 我如何编写将向该表添加行的脚本? 谢谢 问题答案: 技巧:拥有一个带有虚拟密钥的虚拟行,例如99999。将其插入为FK,然后将FK更改为其实际值。并在交易中完成。