Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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后findAll失败_Java_Mongodb_Playframework_Morphia - Fatal编程技术网

Java 重新初始化游戏morphia后findAll失败

Java 重新初始化游戏morphia后findAll失败,java,mongodb,playframework,morphia,Java,Mongodb,Playframework,Morphia,我有下面的类,它在一个游戏中使用morphia持久化到mongodb中!应用该类驻留在一个模块中,该模块是另一个play的依赖项!应用程序 它的配置从文件中读取,并在初始加载时保存到db中(如果它还没有在db中),然后后续请求使用db版本 @Entity public class Page extends Model { @Id public Long navigationId; // etc ... } 初始加载和后续查询访问正常,我可以在mongo中看到页面:

我有下面的类,它在一个游戏中使用morphia持久化到mongodb中!应用该类驻留在一个模块中,该模块是另一个play的依赖项!应用程序

它的配置从文件中读取,并在初始加载时保存到db中(如果它还没有在db中),然后后续请求使用db版本

@Entity
public class Page extends Model {

    @Id
    public Long navigationId;

    // etc ...
}
初始加载和后续查询访问正常,我可以在mongo中看到页面:

> db.Page.find({_id:20000})
{ "_id" : NumberLong(20000), "className" : "models.Page" etc }
但是如果我重新开始玩!或者进行代码更改,导致Morphia重新初始化 (
MorphiaPlugin-1.2.4>初始化
出现在日志中)我得到以下堆栈跟踪:

Caused by: java.lang.RuntimeException: java.lang.RuntimeException: com.google.code.morphia.mapping.MappingException: Error setting value from converter (LongConverter) for models.Page.navigationId to 20000
    at com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:487)
    at com.google.code.morphia.mapping.Mapper.fromDBObject(Mapper.java:267)
    at com.google.code.morphia.query.MorphiaIterator.convertItem(MorphiaIterator.java:66)
    at com.google.code.morphia.query.MorphiaIterator.processItem(MorphiaIterator.java:53)
    at com.google.code.morphia.query.MorphiaIterator.next(MorphiaIterator.java:48)
    at com.google.code.morphia.query.QueryImpl.asList(QueryImpl.java:255)
    at play.modules.morphia.Model$MorphiaQuery.asList(Model.java:1067)
    at models.Page.findAll(Page.java)
    at plugins.PageConfigLoadPlugin.loadPersistedPages(PageConfigLoadPlugin.java:62)
    at plugins.PageConfigLoadPlugin.onApplicationStart(PageConfigLoadPlugin.java:51)
    at play.plugins.PluginCollection.onApplicationStart(PluginCollection.java:425)
    at play.Play.start(Play.java:495)
    ... 3 more
Caused by: java.lang.RuntimeException: com.google.code.morphia.mapping.MappingException: Error setting value from converter (LongConverter) for models.Page.navigationId to 20000
    at com.google.code.morphia.mapping.ValueMapper.fromDBObject(ValueMapper.java:27)
    at com.google.code.morphia.mapping.Mapper.readMappedField(Mapper.java:501)
    at com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:484)
    ... 14 more
Caused by: com.google.code.morphia.mapping.MappingException: Error setting value from converter (LongConverter) for models.Page.navigationId to 20000
    at com.google.code.morphia.converters.DefaultConverters.fromDBObject(DefaultConverters.java:133)
    at com.google.code.morphia.mapping.ValueMapper.fromDBObject(ValueMapper.java:25)
    ... 16 more
如果我使用命令行从mongodb中删除集合,我可以再次从我的游戏中成功加载和查询页面obejct!web应用程序

> db.Page.drop()
true
正如我提到的,这个类在一个模块中。此问题只发生在模块依赖的一个应用程序中。另一个演示应用程序运行良好


有什么建议吗?

依赖模块是否有另一个页面或页面的替代声明 模范班

从堆栈跟踪的顶部(“com.google.code.morphia.mapping.MappingException:将models.Page.navigationId的转换器(LongConverter)的值设置为20000时出错”),这两个文件之间似乎存在类型不匹配 存储和检索数值的方式。例如,在Java中, 将某物存储为Double,然后错误地尝试是很常见的 将其检索为整数或长整数。那么,您能否验证 依赖模块中的navigationId声明与 你在这里看过吗?他们应该分享这个定义,但可能有 替补队员

另一件需要检查的事情是,您的代码在您的 DBObject而不是float。例如,如果要通过外壳插入, 你需要使用其中一种包装,例如

db.Page.save({u id:NumberLong(20000)})

否则,检索时也会导致不匹配;默认情况下
JavaScript中的数字是双倍的。

谢谢你的建议,克里斯。类路径中没有其他页面声明。我非常确信该值被正确保存,因为在命令行上检索它会返回“_id”:NumberLong(20000),并且类中的声明是Long navigationId。