我试图逐步淘汰使用MongoDB / Morphia的旧Java代码库。在此过渡期间,我希望新平台能够写入相同的MongoDB数据库/集合,以便每个人可以并排生存一段时间。那部分我做得很好。我的问题是,在新平台中,我需要一个不同的包/类结构,用于我与morphia映射的对象,而不是当前集合中的对象。
例如,在旧平台上,我有这个课程:
package com.foo;
@Entity
public class Bar {
@Id private String id;
private String name;
...
}
在我的mongo数据库中,我现在有了一个集合" Bar"并且其文档的className属性设置为" com.foo.Bar"。这太棒了。
我想在新平台上做的是在不同的包中创建一个全新的类来表示该实体,但让它以相同的方式与mongo交互。我希望能够做到这样的事情:
package com.foo.legacy;
@Entity("com.foo.Bar")
public class LegacyBar {
@Id private String id;
private String name;
...
}
我意识到上述情况并不奏效,但是如果我将注释更改为@Entity(" Bar")我没有收到任何错误,但当我查找实体时我永远都会回来。
所以......有没有办法让我拥有2个独立的虚拟机,其中包含2个类结构和2个不同的Morpha配置,以便每个虚拟机可以以相同的方式写入同一个数据库/集合?
如果我将LegacyBar改为" Bar"并在名为" com.foo"的包中创建它。一切都按预期工作。我真的很愿意灵活地以半干净的方式隔离所有这些遗留数据。
答案 0 :(得分:3)
您是否需要className
属性?
您可以使用
禁用它@Entity(value = "Bar", noClassnameStored = true)
并将该属性放在数据库中。
你为什么需要它? 这主要用于存储不同的时候 同一个集合中的实体并将它们作为基础或者读回 超级。
如果不这样做,应该是一个简单的解决方法,允许不同的包结构。