Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Morphia-与集合关联的更改类_Java_Mongodb_Morphia - Fatal编程技术网

Java Morphia-与集合关联的更改类

Java Morphia-与集合关联的更改类,java,mongodb,morphia,Java,Mongodb,Morphia,我正试图逐步淘汰使用MongoDB/Morphia的旧java代码库。在这个转换过程中,我希望新平台能够写入相同的MongoDB数据库/集合,这样每个数据库/集合都可以并排运行一段时间。那部分我做得很好。我的问题是,在新平台中,我需要一个不同于当前集合中的包/类结构的包/类结构,用于使用morphia映射的对象 例如,在旧平台中,我有这样一个类: package com.foo; @Entity public class Bar { @Id private String id;

我正试图逐步淘汰使用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”),我不会得到任何错误,但是当我按id查找实体时,我总是返回null

所以。。。我有没有办法让两个单独的虚拟机具有两个类结构和两个不同的Morpha配置,这样每个虚拟机都可以以相同的方式写入相同的数据库/集合


如果我将LegacyBar改为“Bar”,并在一个名为“com.foo”的包中创建它,那么一切都会按预期进行。我真的希望能够灵活地以半干净的方式隔离所有这些遗留数据。

您甚至需要
className
属性吗

您可以使用禁用它

@Entity(value = "Bar", noClassnameStored = true)
并将该属性放到数据库中

引述:

你为什么需要它? 这主要用于存储不同的 同一集合中的实体,并将其作为基础或 超级级


如果不这样做,允许不同的包结构应该是一个简单的解决方法。

您甚至需要
className
属性吗

您可以使用禁用它

@Entity(value = "Bar", noClassnameStored = true)
并将该属性放到数据库中

引述:

你为什么需要它? 这主要用于存储不同的 同一集合中的实体,并将其作为基础或 超级级


如果您不这样做,那么允许不同的包结构应该是一个简单的解决方法。

这很有效。我曾尝试添加“noClassnameStored”标志,但它本身没有帮助。数据库已经有className属性,因此Morphia忽略了我试图将其映射到一个完全不同的类的事实。除此之外,从数据库中删除属性可以解决我的问题。我正在确保这不会对旧系统产生不良影响,但这对我来说已经足够好了。谢谢成功了。我曾尝试添加“noClassnameStored”标志,但它本身没有帮助。数据库已经有className属性,因此Morphia忽略了我试图将其映射到一个完全不同的类的事实。除此之外,从数据库中删除属性可以解决我的问题。我正在确保这不会对旧系统产生不良影响,但这对我来说已经足够好了。谢谢