java.lang.Long不能转换为java.lang.String [英] java.lang.Long cannot be cast to java.lang.String

查看:1097
本文介绍了java.lang.Long不能转换为java.lang.String的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在jsp中迭代 List< myClass> 。这是我如何获得列表:



(当我评论它时,页面加载正常)

 <%
列表< 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();


(myClass pj:pjList)
{
%>
< br />
<%= pj.getSomeField()%>
< br />
<%
}
%>

这是我在google appengine中运行时得到的错误。本地运行良好。

 从servlet获取未捕获的异常
java.lang.ClassCastException:无法将java.lang.Long转换为java.lang .String在org.datanucleus.store.appengine.DatastoreFieldManager.fetchStringField(DatastoreFieldManager.java:188)

在org.datanucleus.state.AbstractStateManager.replacingStringField(AbstractStateManager.java:1180)
在ar.edu.kennedy.proveedores.entities.ProEnteEy.jdoReplaceField(ProEnteEy.java)
在ar.edu.kennedy.proveedores.entities.ProPersonaJuridicaEy.jdoReplaceField(ProPersonaJuridicaEy.java)
在ar.edu .kennedy.proveedores.entities.ProEnteEy.jdoReplaceFields(ProEnteEy.java)
在org.datanucleus.state.JDOStateManagerImpl.replaceFields(JDOStateManagerImpl.java:2772)
在org.datanucleus.state.JDOStateManagerImpl.replaceFields (JDOStateManagerImpl.java:2791)
at org.datanucleus.store.appengine.DatastorePersistenceHandler.fetchObject(DatastorePersistenceHandler.java:443)
at org.datanucleus.store.appengine.qu ery.DatastoreQuery.entityToPojo(DatastoreQuery.java:433)
处org.datanucleus.store.appengine org.datanucleus.store.appengine.query.DatastoreQuery.entityToPojo(DatastoreQuery.java:391)
。在org.datanucleus.store.appengine.query.DatastoreQuery $ 5.apply(DatastoreQuery.java:515)
(org.datanucleus.store)
(DatastoreQuery.java:97)
。 appengine.query.DatastoreQuery $ 5.apply(DatastoreQuery.java:507)
在org.datanucleus.store.appengine.query.StreamingQueryResult.resolveNext(StreamingQueryResult.java:137)
在org.datanucleus.store在org.datanucleus.store.appengine.query.AbstractIterator.tryToComputeNext .appengine.query.StreamingQueryResult $ 1.computeNext(StreamingQueryResult.java:163)
(AbstractIterator.java:132)
。在org.datanucleus。 store.appengine.query.AbstractIterator.hasNext(AbstractIterator.java:127)
at org.datanucleus.store.appengine.query.StreamingQueryResult $ AbstractListIterator.hasNext(StreamingQueryResult.java:22 9)
在org.apache.jsp.busquaa_jsp._jspService(busqueda_jsp.java:138)

如果我使用ListIterator并调用hasNext(),我得到相同的错误。

解决方案

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

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

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



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



请尝试在您的班级中标识数字值被映射为字符串并且固定它们。一个接一个地开始工作。

I need to iterate a List<myClass> in a jsp. This is how I obtain the list:

(when I commented it, the page loaded just fine).

 <%
      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 />
    <%
}
%>

This is the error I get when running it in google appengine. locally it runs fine.

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)

If I use a ListIterator and call hasNext() I get the same error. Help me understand what is happening, how to solve this?

解决方案

It looks like the mapping you have from "myclass" is wrong.

There is a field marked as "String" when in fact it is a "number".

What it seems to happen from the StackTrace is that your value is fetched from the database and then casted to a string.

Since the value is not an string, you get that exception.

Try identifying in your class which "numeric" values are mapped as String and have them fixed. Start one by one until it works.

这篇关于java.lang.Long不能转换为java.lang.String的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆