我需要在jsp中迭代List<myClass>
。这就是我获取列表的方式:
(当我评论它时,页面加载得很好)。
<%
List<myClass> pjList = null;
StringBuffer ejbQuery = new StringBuffer();
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPersistence");
EntityManager em = emf.createEntityManager();
ejbQuery.append("SELECT e ");
ejbQuery.append("FROM myClass e ");
pjList = em.createQuery(ejbQuery.toString()).getResultList();
for(myClass pj : pjList)
{
%>
<br />
<%= pj.getSomeField()%>
<br />
<%
}
%>
这是我在google appengine中运行时遇到的错误。在当地运行良好。
Uncaught exception from servlet
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
at org.datanucleus.store.appengine.DatastoreFieldManager.fetchStringField(DatastoreFieldManager.java:188)
at org.datanucleus.state.AbstractStateManager.replacingStringField(AbstractStateManager.java:1180)
at ar.edu.kennedy.proveedores.entities.ProEnteEy.jdoReplaceField(ProEnteEy.java)
at ar.edu.kennedy.proveedores.entities.ProPersonaJuridicaEy.jdoReplaceField(ProPersonaJuridicaEy.java)
at ar.edu.kennedy.proveedores.entities.ProEnteEy.jdoReplaceFields(ProEnteEy.java)
at org.datanucleus.state.JDOStateManagerImpl.replaceFields(JDOStateManagerImpl.java:2772)
at org.datanucleus.state.JDOStateManagerImpl.replaceFields(JDOStateManagerImpl.java:2791)
at org.datanucleus.store.appengine.DatastorePersistenceHandler.fetchObject(DatastorePersistenceHandler.java:443)
at org.datanucleus.store.appengine.query.DatastoreQuery.entityToPojo(DatastoreQuery.java:433)
at org.datanucleus.store.appengine.query.DatastoreQuery.entityToPojo(DatastoreQuery.java:391)
at org.datanucleus.store.appengine.query.DatastoreQuery.access$800(DatastoreQuery.java:97)
at org.datanucleus.store.appengine.query.DatastoreQuery$5.apply(DatastoreQuery.java:515)
at org.datanucleus.store.appengine.query.DatastoreQuery$5.apply(DatastoreQuery.java:507)
at org.datanucleus.store.appengine.query.StreamingQueryResult.resolveNext(StreamingQueryResult.java:137)
at org.datanucleus.store.appengine.query.StreamingQueryResult$1.computeNext(StreamingQueryResult.java:163)
at org.datanucleus.store.appengine.query.AbstractIterator.tryToComputeNext(AbstractIterator.java:132)
at org.datanucleus.store.appengine.query.AbstractIterator.hasNext(AbstractIterator.java:127)
at org.datanucleus.store.appengine.query.StreamingQueryResult$AbstractListIterator.hasNext(StreamingQueryResult.java:229)
at org.apache.jsp.busqueda_jsp._jspService(busqueda_jsp.java:138)
如果我使用ListIterator并调用hasNext(),我会得到同样的错误。帮助我了解发生了什么,如何解决这个问题?
答案 0 :(得分:2)
看起来你对“myclass”的映射是错误的。
有一个标记为“String”的字段,实际上它是一个“数字”。
从StackTrace看起来似乎是从数据库中获取值,然后将其转换为字符串。
由于该值不是字符串,因此您将获得该异常。
尝试在您的类中识别哪些“数字”值被映射为String并将其修复。一个接一个地开始,直到它工作。
答案 1 :(得分:1)
问题是,在您的类myClass
中有一个String类型的字段,它由数据库中的整数表示。 DataNucleus JDO正在尝试将此值转换为Long,而不是String,因此是错误。您需要确保对象的数据类型与数据存储中的数据匹配。
答案 2 :(得分:0)
我只能猜测myClass与其描述(可能是基于XML的;-)在持久层中不匹配。
答案 3 :(得分:0)
我使用java创建了web服务,在我的本地计算机(Windows XP)中使用tomcat 6版本格式化为pdf。但是在我的服务器(并且有tomcat 7)的unix上,它抛出了一个错误java.lang.ClassCastException:java.lang.Long无法强制转换为java.lang.Integer。 我一直在寻找答案,最后我通过将服务器中的tomcat版本从7更改为6来解决问题。我认为可能会帮助其中一些人,他们遇到了这样的问题。
答案 4 :(得分:-5)
criteria.add(Expression.like("status", 115));
错误:java.lang.classCastException:java.lang.Integer无法强制转换为java.lang.String
这样做:
criteria.add(Expression.like("status", new String("115")));