Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法将jpa ClassCastException Long强制转换为列表_Java_List_Google App Engine_Jpa - Fatal编程技术网

Java 无法将jpa ClassCastException Long强制转换为列表

Java 无法将jpa ClassCastException Long强制转换为列表,java,list,google-app-engine,jpa,Java,List,Google App Engine,Jpa,我正在gae/j上开发一个应用程序 我已经设置了一个实体,我正在尝试持久化列表字段。问题是我得到了一个ClassCastException @Entity public class Party { @Id @GeneratedValue (strategy = GenerationType.IDENTITY) public Key Id; @ElementCollection(fetch = FetchType.EAGER) public List<Long> guests;

我正在gae/j上开发一个应用程序

我已经设置了一个实体,我正在尝试持久化列表字段。问题是我得到了一个ClassCastException

@Entity
public class Party {

@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
public Key Id;


@ElementCollection(fetch = FetchType.EAGER)
public List<Long> guests;

public List<Long> getGuests(){
    if(guests== null){
        guests = new ArrayList<Long>();
    }
    return guests;
}

public void setGuests(List<Long> guests){
    this.guests = guests;
}
}
很抱歉,如果我忽略了一个简单的答案,但我只想在party对象的列表字段中存储一个用户id列表(键入Long)。我已经尝试了每一个jpa注释,并阅读了应用程序引擎文档数天来寻找解决方案

我通常可以在堆栈跟踪中找到我的bug,但是这个没有告诉我bug在代码中的位置。如果您注意到第104行Partyendpoint.java中引起的问题,则实体管理器将关闭

谢谢你的帮助

更新:我添加了我正在调用的导致问题的方法。我正在使用云端点向android和ios设备发送收集响应。

@SuppressWarnings({ "unchecked", "unused" })
@ApiMethod(name = "listParty")
public CollectionResponse<Party> listParty(@Nullable @Named("cursor") String cursorString,@Nullable @Named("limit") Integer limit) {

    EntityManager mgr = null;
    Cursor cursor = null;
    List<Party> execute = null;

    try {
        mgr = getEntityManager();
        Query query = mgr.createQuery("select from Party as Party");
        if (cursorString != null && cursorString != "") {
            cursor = Cursor.fromWebSafeString(cursorString);
            query.setHint(JPACursorHelper.CURSOR_HINT, cursor);
        }

        if (limit != null) {
            query.setFirstResult(0);
            query.setMaxResults(limit);
        }

        execute = (List<Party>) query.getResultList();
        cursor = JPACursorHelper.getCursor(execute);
        if (cursor != null)
            cursorString = cursor.toWebSafeString();

        // Tight loop for fetching all entities from datastore and accomodate
        // for lazy fetch.
        for (Party obj : execute)
            ;
    } finally {
        mgr.close();
    }

    return CollectionResponse.<Party> builder().setItems(execute)
            .setNextPageToken(cursorString).build();
}
@SuppressWarnings({“未选中”、“未使用”})
@ApiMethod(name=“listParty”)
public CollectionResponse listParty(@Nullable@Named(“cursor”)字符串cursorString,@Nullable@Named(“limit”)整数限制){
EntityManager mgr=null;
游标=空;
List execute=null;
试一试{
mgr=getEntityManager();
Query Query=mgr.createQuery(“从参与方中选择作为参与方”);
if(cursorString!=null&&cursorString!=“”){
cursor=cursor.fromWebSafeString(cursorString);
setHint(JPACursorHelper.CURSOR\u HINT,CURSOR);
}
如果(限制!=null){
query.setFirstResult(0);
query.setMaxResults(限制);
}
execute=(List)query.getResultList();
cursor=JPACursorHelper.getCursor(执行);
如果(光标!=null)
cursorString=cursor.towerbsafesting();
//用于从数据存储中获取所有实体的紧密循环
//为了偷懒。
对于(第三方对象:执行)
;
}最后{
经理关闭();
}
return CollectionResponse.builder().setItems(执行)
.setNextPageToken(cursorString.build();
}

可能您正在对代码进行计数查询,并将结果放入L
ist
中,因此您将面临错误

下面是如何使用
EntityManager
获取count的值(您也可以使用
会话


我不认为在粘贴的代码中有任何问题。gae的输出似乎很长,但您期待它的列表。请检查。谢谢您的回复。是的,当我尝试列出所有参与方实体时,错误不断发生。在我的Partyendpoint.java文件中,我调用listParty方法,它从实体管理器获取所有参与方。我试图列出所有参与方,并获取每个参与方的来宾列表,这就是问题所在吗?如果是这样的话,我是不是应该把清单拿出来试试别的?我不确定。可能是您执行的查询错误,或者您执行的方式错误。请尝试您的jpql作为
从参与方p中选择p
@SuppressWarnings({ "unchecked", "unused" })
@ApiMethod(name = "listParty")
public CollectionResponse<Party> listParty(@Nullable @Named("cursor") String cursorString,@Nullable @Named("limit") Integer limit) {

    EntityManager mgr = null;
    Cursor cursor = null;
    List<Party> execute = null;

    try {
        mgr = getEntityManager();
        Query query = mgr.createQuery("select from Party as Party");
        if (cursorString != null && cursorString != "") {
            cursor = Cursor.fromWebSafeString(cursorString);
            query.setHint(JPACursorHelper.CURSOR_HINT, cursor);
        }

        if (limit != null) {
            query.setFirstResult(0);
            query.setMaxResults(limit);
        }

        execute = (List<Party>) query.getResultList();
        cursor = JPACursorHelper.getCursor(execute);
        if (cursor != null)
            cursorString = cursor.toWebSafeString();

        // Tight loop for fetching all entities from datastore and accomodate
        // for lazy fetch.
        for (Party obj : execute)
            ;
    } finally {
        mgr.close();
    }

    return CollectionResponse.<Party> builder().setItems(execute)
            .setNextPageToken(cursorString).build();
}
Long count = (Long)em.createQuery("SELECT COUNT(d) FROM Test d").getSingleResult();
Long count = em.createQuery("SELECT COUNT(d) FROM Test d", Long.class).getSingleResult();