【发布时间】:2012-12-14 09:11:57
【问题描述】:
所以我的问题是在我的生产数据库中自动创建旨在包含临时数据的集合(但从逻辑上讲永远不会填充任何这些临时文档)。为什么会这样,我该如何避免这种行为?
例如更正式的解释,我有两个数据库 - 以及它们包含的集合
productiveDB.coll1
productiveDB.coll2
和
temporaryDB.col3
temporaryDB.col4
但是当我开始存储数据时,spring 会自动创建
productiveDB.coll1
productiveDB.coll2
productiveDB.col3
productiveDB.col4
记录:我已经在使用 1.1.1.RELEASE。我创建了一个小测试用例,其中重复了这种行为:两个文档(MyDocOne 和 MyDocTwo)都在自定义字段上包含 @Indexed 注释 - 它们还包含对象类型的字段。所以当我创建实体myDocOne and myDocTwo - 设置myDocTwo.obj = myDocOne 并持久化myDocTwo - spring 在template2 中创建一个集合myDocOne...这有点令人困惑 - 我希望下面的代码能提供更好的概述。
public static void main(String[] args ) {
App app = new App();
ApplicationContextLoader loader = new ApplicationContextLoader();
loader.load(app, "applicationContext.xml");
MongoTemplate template1;
MongoTemplate template2;
try {
template1 = new MongoTemplate(new Mongo("localhost"), "tmp1");
template1.setApplicationContext(loader.getApplicationContext());
template2 = new MongoTemplate(new Mongo("localhost"), "tmp2");
template2.setApplicationContext(loader.getApplicationContext());
MyDocOne one = new MyDocOne("foo", "bar");
template1.save(one);
MyDocTwo two = new MyDocTwo("foo", "baz");
two.setAny(one);
template2.save(two);
} catch (Exception e) {
e.printStackTrace();
}
}
和文件:
@Document
public class MyDocOne {
@Indexed
String a;
String b;
public MyDocOne(String a, String b) {
super();
this.a = a;
this.b = b;
}
}
@Document
public class MyDocTwo {
@Indexed
String a;
String b;
Object any;
public MyDocOne(String a, String b) {
super();
this.a = a;
this.b = b;
}
public void setAny(Object any) {
this.any = any;
}
}
【问题讨论】:
标签: mongodb spring-data spring-data-mongodb