gpt4 book ai didi

java - 重新初始化 Play 吗啡后 findAll 失败

转载 作者:行者123 更新时间:2023-12-02 08:01:51 26 4
gpt4 key购买 nike

我有以下类,它在戏剧中使用吗啡持久保存到 mongodb 中!应用。该类驻留在一个模块中,该模块是另一个游戏的依赖项!应用。

它的配置是从文件中读取的,并在初始加载时保存到数据库中(如果它尚未在数据库中),然后后续请求使用数据库版本。

@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 中删除集合,我可以再次从我的游戏中成功加载和查询页面对象!网络应用程序

> db.Page.drop()
true

正如我所提到的,此类位于模块中。此问题仅发生在该模块依赖的一个应用程序中。另一个演示应用程序运行良好。

有什么建议吗?

最佳答案

依赖模块是否有另一个替代的页面声明或模型类?

从堆栈跟踪的顶部(“com.google.code.morphia.mapping.MappingException:模型的转换器(LongConverter)将值设置为20000时出错”),看起来有一个类型之间不匹配存储和检索数值的方式。例如,在Java中,将某些内容存储为 Double 然后错误地尝试的情况并不少见将其检索为整数或长整型。那么,您能否验证一下依赖模块中navigationId的声明与之前的相同你在这里展示过吗?他们应该共享定义,但有可能一个替补。

另一件事要检查的是您的代码是否将 Long 放入您的DBObject 而不是 float 。例如,如果您通过 shell 插入它,您需要使用其中一个包装器,例如

db.Page.save({_id:NumberLong(20000)});

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

关于java - 重新初始化 Play 吗啡后 findAll 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8798572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com