Spring + MongoDB + DBRef

时间:2012-10-23 17:26:04

标签: java spring mongodb

在Spring项目中,我正在使用Spring Data MongoDB,并且有两个类:

public class ClassA
{
@Id
private String id;

private String description

@DBRef
private ClassB classBId;

// Getters and Setters
}

public class ClassB
{
@Id
private String id;

private String description

// Getters and Setters
}

这样我有2个集合,classA和classB,并用几个实例填充它们。

classA实例的存储方式如下:

  

{“_ id”:{“$ oid”:“5086b371004d7c4bfff0a142”},“_ class”:   “com.spring.custom.ClassA”,“description”:“Description A”,   “classBId”:{“$ ref”:“classB”,“$ id”:{“$ oid”:   “50866d45004d84852b16a8b8”}}}

我的问题是,如何创建一个返回所有引用带有id的classB实例的classA对象的查询 50866d45004d84852b16a8b8?

我试过这样但没有成功:

ClassB cb = new ClassB(); cb.setId("50866d45004d84852b16a8b8");

Criteria criteria = Criteria.where("classBId").is(classBObject);
Query query = new Query(); query.addCriteria(criteria);

1 个答案:

答案 0 :(得分:1)

找到了一种方法来做我需要的......

ObjectId oid = new ObjectId(id);
Criteria.where(classBid+".$id").is(oid);

不幸的是,这不是我预期的方式,但它仍然是一个解决方案......

我甚至尝试将我的Spring Data MongoDB API更新为1.0.4 RELEASE而不是1.0.2 RELEASE,希望我能够得到相同的结果:

ClassB cb = new ClassB();
cb.setId("50866d45004d84852b16a8b8");

Criteria criteria = Criteria.where("classBId").is(classBObject);
Query query = new Query();
query.addCriteria(criteria); 

但我一直收到以下错误:

java.lang.RuntimeException:json无法序列化类型:class ClassB ...