我写代码时遇到了麻烦,这将允许以一种简单明了的方式获取用户和索赔细节。这是我的MongoDB结构,
db.user.find();
user:
{
"name" : "KSK",
"claim" : [objectId("52ffc4a5d85242602e000000"),objectId("52ffc4a5d85242602e000001")]
}
claim:
[
{
"_id" : "52ffc4a5d85242602e000001",
"claimName" :"XXXX"
},
{
"_id" : "52ffc4a5d85242602e000000",
"claimName" :"YYY"
}
]
我的实体类是:
@Document(collection="user")
public class User{
@Id
private String id;
private String name;
@DBRef
private List<Claim> claim;
// setter and getter
}
索赔类别:
@Document(collection="Claim")
public class Claim{
@Id
private String id;
private String claimName;
}
我有一种方法可以按名称获取用户,如下所示,
public User findByName(String name);
如果我尝试使用这个方法,会得到一个错误,
找不到能够从类型<code>org.bson.types转换的转换器。ObjectId以键入java.lang.String
所以我更改了我的用户实体类,如下所示,
而不是私有列表
更改为
私人列表
现在,如果我执行一个方法(findByName),我会得到一个用户对象,它同时具有声明的对象Id
(“52ffc4a5d85242602e0000001”,“52ffc 4a5d 85242600e000000”)
,然后迭代声明列表并获得与声明对象Id相对应的声明详细信息。
当我执行
findByName
方法时,我想获取用户并声明详细信息,而不是这样做。如何实现此功能?
作为@DBRef的替代方案,请查看RelMongo(链接),它提供了一种强大的关系管理方法,在您的情况下,它将是这样的:
@OneToMany(fetch = FetchType.LAZY)
private list<Claim> claims;
我建议不要将声明类设置到单独的@Document中,或者切换回关系数据库,因为这不是Mongo方法。此外,如果您坚持使用当前的体系结构,您可以尝试在smth中使用User.class中列表上方的@DBRef,如下所示:
public class ParentModel {
@Id
private String id;
private String name;
private ParentType parentType;
private SubType subType;
@DBRef
private List<Model> models;
....
}
如果使用 @DBRef 引用 User
类中的声明
,则 JSON 不仅应包含 ID,还应包含对在其中查找 ID 的集合的引用,如下所示:
{
"name" : "KSK",
"claim" : [
{
"$ref" : "claim", // the target collection
"$id" : ObjectId("52ffc4a5d85242602e000000")
}
]
}
这就是Spring-Data将Java对象映射到MongoDB的方式。如果你从一个空白数据库开始,让 Spring 创建并保存关系,你应该没有问题使用
@DBRef List<Claim> claims;
问题内容: 我在MongoDB中的规范化数据模型结构中遇到以下错误: 这是由于以下原因造成的: 具体的部分。我的文档中有一个DBRef对象,因此我可以引用另一个集合中的文档。嵌入式文档结构不是选项。那么我该如何解决呢? 问题答案: 您必须为其导入DBRef编解码器才能进行打印,如果您希望以文档json样式进行打印,则需要编写自己的DBRef编解码器,并将其添加到您给toJson()的编解码器中。
问题内容: 从Java序列化为JSON时,当使用带有延迟加载和Jackson的多态类型处理的Spring Data MongoDB 批注时,Jackson会为引用的实体生成一个额外的属性。为什么会发生这种情况,并且可以省略多余的属性? 代码示例 生成的JSON 问题答案: “目标”字段由Spring Data添加,因为它是一个惰性集合。因此就像Hibernate for JPA中的datahand
主要内容:DBRefs 与手动引用,使用 DBRefs在《 MongoDB关系》一节中,为了在 MongoDB 中实现规范化的数据库结构,我们使用了引用式关系(也称为手动引用)的概念,在手动引用中,我们需要将被引用文档的 _id 存储在其他文档中。当文档中需要引用来自不同集合数据的情况下,我们可以使用 MongoDB 中的 DBRefs。 DBRefs 与手动引用 假如有这样一个数据库,其中有一个 users 集合,用来存储用户信息,以及其它一些集合
我写了这个程序spring boot mongodb reactive 依赖项: 应用。道具文件: 我的代码在此链接中运行良好: 但是在这个链接中: 代码引发以下错误: 导致此错误的原因是DBRef注释,它根本不起作用。它引发以下异常。我们可以添加这样的配置使其工作吗?提前谢谢你
我试图将一个包含@dbref的对象保存并加载到另一个恰好是子类类型的对象,并且Spring Data MongoDB将该字段加载为NULL。 发生的情况是,对象保存在集合中,并且MongoDB中的值为并且Person文档中的指向而不是。 集合: 集合: 如果使用或加载对象,则字段为空。但是如果我对burger对象使用,则返回person对象。我在这里有什么理解不对的?
我有一个实体Market(Market存储在marketDb数据库中的集合中)引用Product(存储在productDb数据库中的集合产品中)。 /**市场在集合中存储为:*/ 当我尝试通过Id读取市场时,我能够获取市场,但产品返回为NULL。 然而:1。如果product存储在与Market属于同一数据库的集合中,则product将作为read on Market的一部分返回。2.如果在上述代
我是spring数据Mongo的新手,所以我肯定做错了什么,因为我无法执行这样一个简单的查询。这是我的模型: 我想从一个品牌获得所有的模型,所以我实现DAO如下: 如果我在shell中执行这个mongodb查询,它就会工作: 但是,Java应用程序抛出以下异常: 很明显,它在Brand类中查找一个字段$id,但由于它不存在,它失败了。因此,我将查询更改为以下内容,以便它导航到id字段: 现在,它没
Mongoose似乎不支持Mongo DBREF。显然,他们发布了“dbref”支持,但它实际上只是简单的引用(不具备引用不同集合中的文档的能力)。我终于创建了一个模式,允许我保存ObjectID引用的数组并填充它们,这对于我的模式的某些部分是很好的,但是如果我可以使用适当的DBREF创建一个数组,允许我引用来自多个集合的文档,那将是非常方便的。 幸运地(?)有一个模块可以在Mongoose中修补