Play框架中抛出的无法解释的ClassCastException

Play框架中抛出的无法解释的ClassCastException,exception,playframework,classcastexception,Exception,Playframework,Classcastexception,我在处理Play Framework项目时遇到了一个奇怪的错误。当我的项目运行时,我有时会收到ClassCastException,但错误如下: ClassCastException发生:模型。无法将人物转换为模型。人物 这通常在调用查找方法时发生,例如: Person p=Person.find(“name=?”,“Joe”).first() 如果我重新启动项目,问题就会消失,但只是暂时的。这使得测试我的项目成为一件非常痛苦的事情。如何修复此问题?这很可能是因为您以某种方式将Person类加载

我在处理Play Framework项目时遇到了一个奇怪的错误。当我的项目运行时,我有时会收到ClassCastException,但错误如下:

ClassCastException发生:模型。无法将人物转换为模型。人物

这通常在调用查找方法时发生,例如:

Person p=Person.find(“name=?”,“Joe”).first()


如果我重新启动项目,问题就会消失,但只是暂时的。这使得测试我的项目成为一件非常痛苦的事情。如何修复此问题?

这很可能是因为您以某种方式将Person类加载到了两个不同的类加载器下。当一个类在两个不同的类装入器中装入两次时,它实际上是两个不同的类

(不幸的是,我无法告诉您在哪里/如何做到这一点。)


(让问题出现在您列出的语句中有点奇怪。您确定问题就发生在那里吗?也许您应该显示异常回溯。)

我在游戏中的开发模式下遇到过这个错误,有两种情况(据我所知):

  • 修改实体并尝试从缓存中恢复属于该实体类的对象的值
  • 重新加载页面/应用程序的代码时出现编译错误
在这两种情况下,修复编译错误或清理缓存解决了问题


并不是说这些是唯一的可能性,可能是您遇到了一些其他问题。

在我的例子中,这与应用web界面的演变有关。有人提出了这个问题,但到目前为止还没有得到开发团队的任何关注。罚单上附加了一个补丁,但我还没有尝试过,所以YMMV。

我很确定这就是它发生的地方——在本地工作区运行项目时,将出现播放错误页面,并以红色突出显示此语句。此错误通常发生在我编辑代码、保存文件,然后返回到我的项目时。@torourke--如果您在运行时动态编辑/编译,这就可以解释了。我在开发模式下也见过几次。它通常发生在热代码更改之后,即使是对与实体(您案例中的Person类)无关的文件进行更改,我也面临同样的问题。我相信这与dev-webserver的“重新加载”特性有关。它似乎坏了,或者我的机器配置不好。既然Play还太形象化了,我打赌是第一个选项。我在Play 2.6.3中也有同样的问题。正如@HotLicks提到的,这可能是一个名称空间问题。我没有注意到我实际上有两个
main.scala.html
文件(一个子项目中的一个),这使我产生了这个运行时错误,所以更改文件名使它消失了