我有以下课程,在剧中使用morphia持久保存到mongodb中!应用。该类位于一个模块中,该模块是另一个游戏的依赖项!应用。
从一个文件读取其配置并在初始加载时持久保存到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> initialized
出现在日志中)我得到以下堆栈跟踪:
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中删除Collection,我可以再次从我的播放中加载并查询Page obejct!网络应用程序
> db.Page.drop()
true
正如我所提到的,这个类在一个模块中。此问题仅发生在模块是其依赖项的一个应用程序中。另一个演示应用程序工作正常。
有什么建议吗?
答案 0 :(得分:2)
依赖模块是否有另一个页面的备用声明 模型类?
从堆栈跟踪的顶部,(“com.google.code.morphia.mapping.MappingException:将转换器的错误设置值(LongConverter)设置为models.Page.navigationId到20000”),它看起来像是一个类型两者之间的不匹配 数据值的存储和检索方式。例如,在Java中, 将某些东西存储为Double然后错误地尝试并不罕见 将其检索为整数或长整数。那么,你可以验证一下吗? 依赖模块中的navigationId声明与一个相同 你在这里展示过?他们应该分享定义,但它可能存在 替代。
要检查的另一件事是你的代码在你的代码中放了一个龙 DBObject而不是浮点数。例如,如果您通过shell插入它, 你需要使用其中一个包装器,例如
db.Page.save({_ ID:NumberLong(20000)});
否则,当您检索它时,这也会导致不匹配;默认情况下 JavaScript中的数字是双倍的。