Google app engine 无法将java.lang.Long转换为java.lang.String

Google app engine 无法将java.lang.Long转换为java.lang.String,google-app-engine,exception,jsp,Google App Engine,Exception,Jsp,我需要在jsp中迭代一个列表。以下是我获取列表的方式: (当我发表评论时,页面加载得很好) 如果我使用ListIterator并调用hasNext(),我会得到相同的错误。请帮助我了解发生了什么,如何解决这个问题?我只能猜测myClass与持久层中的描述(可能是基于XML的;-)不匹配 问题在于,在您的类myClass中,有一个字符串类型的字段,该字段由数据库中的整数表示。DataNucleus JDO正试图将此值转换为长字符串,而不是字符串,因此出现了错误。您需要确保对象的数据类型与数据存储中

我需要在jsp中迭代一个
列表。以下是我获取列表的方式:

(当我发表评论时,页面加载得很好)


如果我使用ListIterator并调用hasNext(),我会得到相同的错误。请帮助我了解发生了什么,如何解决这个问题?

我只能猜测myClass与持久层中的描述(可能是基于XML的;-)不匹配

问题在于,在您的类
myClass
中,有一个字符串类型的字段,该字段由数据库中的整数表示。DataNucleus JDO正试图将此值转换为长字符串,而不是字符串,因此出现了错误。您需要确保对象的数据类型与数据存储中的数据匹配。

看起来您从“myclass”获得的映射是错误的

有一个字段标记为“字符串”,而实际上它是一个“数字”

StackTrace中出现的情况是,从数据库中提取您的值,然后将其转换为字符串

由于该值不是字符串,因此会出现该异常

尝试在类中标识哪些“数值”值映射为字符串,并将其固定。一个接一个地开始,直到成功

criteria.add(Expression.like("status", 115));
错误:java.lang.classCastException:java.lang.Integer无法转换为java.lang.String

这样做:

criteria.add(Expression.like("status", new String("115")));

我用java创建了web服务,它在本地计算机(windows XP)上用tomcat 6版本将fo格式化为pdf。但是在我的服务器中的unix上(还有tomcat 7),它抛出了一个错误java.lang.ClassCastException:java.lang.Long不能转换为java.lang.Integer。
我一直在寻找答案,最后通过将服务器中的tomcat版本从7改为6,解决了这个问题。我认为这可能会对遇到这种问题的一些人有所帮助。

注意:在现实生活中,我的持久性提供程序是单例的,我在servlet中的一个类中执行查询,但我复制了相关代码,以便您可以看到列表的来源。请注意,我没有数据库,只有持久性的类。在这种情况下是否存在不匹配?您可能没有自己管理的数据库,尽管我不熟悉datanucleus,但他们很有可能在内部使用数据库。即使他们不使用db作为持久性,他们也将“编组”和“解编组”数据,他们可能会使用映射来知道如何做到这一点。您的问题似乎来自于“映射”是的,旧数据仍然以以前的字段类型存储,查询返回旧数据和新数据(!)。由于类成员类型的更改,删除旧数据修复了问题。请注意,我没有数据库,只有持久的类。在这种情况下是否会存在不匹配?正如Oscar Reyes所说,底层实现似乎正在使用JDO特性。
criteria.add(Expression.like("status", 115));
criteria.add(Expression.like("status", new String("115")));