【发布时间】:2017-10-30 18:31:21
【问题描述】:
我在编写允许以直接方式获取用户和声明详细信息的代码时遇到问题。这是我的 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);
如果我尝试使用此方法会收到一个错误,
找不到能够从org.bson.types.ObjectId 类型转换为java.lang.String 类型的转换器
所以我改变了我的用户实体类,如下所示,
而不是private List<Claim> claim;
改成Private List<ObjectId> claim;
现在,如果我执行一个方法(findByName),我会得到一个同时拥有声明对象 ID ("52ffc4a5d85242602e000001","52ffc4a5d85242602e000000") 的用户对象,然后迭代声明列表并获取与声明对象 ID 对应的声明详细信息。
当我执行findByName 方法时,我不想这样做,而是想要获取用户并声明详细信息。我怎样才能实现这个功能?
【问题讨论】:
-
您使用 List
的初始方法看起来不错。您确定这不是驼峰式问题吗,请参阅 Java 类中的 claimname和 JSON 中的claimName。 -
@Matt 只是一个拼写错误。我现在修改了。
标签: java mongodb spring-mongo spring-mongodb