我需要List<myClass>在一个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(),则会出现相同的错误。帮助我了解发生了什么,如何解决?
看来您从“ myclass”获得的映射是错误的。
当它实际上是一个“数字”时,有一个标记为“字符串”的字段。
从StackTrace看来发生的是,您的值是从数据库中获取的,然后转换为字符串。
由于该值不是字符串,因此会出现该异常。
尝试在您的班级中识别哪些“数字”值映射为String并已将其固定。一步一步开始,直到它起作用。