这是我的MongoDB的结构,
db.user.find();
用户:
{
"name" : "KSK",
"claim" : [objectId("52ffc4a5d85242602e000000"),objectId("52ffc4a5d85242602e000001")]
}
要求:
[
{
"_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);
如果我尝试打这个方法我得到一个错误,
没有找到转换器能够从类型转换的org.bson.types.ObjectId到java.lang.String类型
所以我改变了我的用户实体类像下面,
相反的private List<Claim> claim
;
改变Private List<ObjectId> claim
;
现在,如果我执行的方法(findByName),我得到同时具有要求的对象ID用户对象(“52ffc4a5d85242602e000001”,“52ffc4a5d85242602e000000”),则迭代的要求列表,并获得相应的索赔对象ID要求细节。
相反,这样做的,当我执行findByName方法我想获得用户和要求的详细信息。我怎样才能实现这个功能
如果您引用您Claim
在S User
与@DBRef类,你的JSON不应该只包含ID,但参考集合在哪里可以找到ID为好,就像这样:
{
"name" : "KSK",
"claim" : [
{ "$ref":"claim", // the target collection
"$id : "ObjectId("52ffc4a5d85242602e000000")
}
]
}
这是怎么Spring的数据映射您的Java对象的MongoDB。如果你开始一个空白数据库,并让Spring创建和保存的关系,你应该使用没有问题
@DBRef List<Claim> claims;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句