2014-10-08 71 views
1

谷歌应用程序引擎通过page.jspClassCastException异常查询通过列表<Class>

<% 
    Query query = pm.newQuery(Store.class); 
    query.setFilter("id=='" + store + "'"); 
    query.setOrdering("name asc"); 
    List<Store> aList = (List<Store>) query.execute(); 
    System.out.println("aList==isEmpty?"+aList.isEmpty()); 
%> 

例外:

java.lang.ClassCastException: com.google.appengine.api.datastore.Blob cannot be cast to java.lang.String 

谁能帮我?

回答

1

注意:要标记此问题可能重复GAE ClassCastException Long cannot be cast to double但不能(因为StackOverflow表示另一个问题没有接受答案或答案积极分数)。


的异常意味着你至少有一个Store实体保存在数据存储在您与属性类型Blob但在Java实体指定它为String并保存它,当你想查询它并转换它返回到Java类,尝试转换Blob - >String引发异常。

你可能做使用低级别的数据存储区API是只读的所有Store entitites,并更改Blob性能String这应该是String摆在首位,然后重新保存这些实体(或更改类型的如果它应该是Blob,则从StringBlob的Java字段)。或者,如果当前实体不重要(例如测试数据),只需删除它们。

文档:Java low-level Datastore API

+0

如果只有一个或几个实体这个问题,你还可以找到出错的属性在数据存储浏览器,并手动将其重置为null,然后再转换为String。 – 2014-10-08 18:56:17

0

对不起! 我解决了这个问题。 答:

修改

<%@ page import="java.util.*"%> 

<%@ page import="java.util.List" %>