一尘不染

无法将java.lang.Long强制转换为java.lang.String

jsp

我需要List<myClass>在一个jsp中迭代一个。这是我获取列表的方式:

(当我发表评论时,页面加载正常)。

 <%
      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(),则会出现相同的错误。帮助我了解发生了什么,如何解决?


阅读 1061

收藏
2020-06-10

共1个答案

一尘不染

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

当它实际上是一个“数字”时,有一个标记为“字符串”的字段。

从StackTrace看来发生的是,您的值是从数据库中获取的,然后转换为字符串。

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

尝试在您的班级中识别哪些“数字”值映射为String并已将其固定。一步一步开始,直到它起作用。

2020-06-10