java - 如何解决 java.io.NotSerializableException : com. google.appengine.datanucleus.query.JPQLQuery?

标签 java google-app-engine gwt jpa

我正在使用带有 JPA 注释的谷歌应用引擎;

我有一节课

    @Entity
    public class XYZ implements Serializable{
    // default constructor and properties defined here.
}

@SuppressWarnings("unchecked") 
public List<XYZ> listXYZ(String id) {
    List<XYZ> xyzlist = null;
    EntityManager em = EMF.get().createEntityManager();
    try{
        // Read the existing entries
         Query q = em.createQuery("select t from XYZ t where t.id = :id");
         q.setParameter("id", id);
         xyzlist = q.getResultList();        
    }catch(Exception e){

    }finally{
        em.close();
    } 
  return xyzlist ;
}

我从 listXYZ() 函数获取对象列表。

  List<XYZ> list = dao.listXYZ("1");

但是当我要将它放入 session 时

session.setAttribute("list",list);

它抛出运行时异常:

Caused by: java.io.NotSerializableException: com.google.appengine.datanucleus.query.JPQLQuery$1
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at java.util.ArrayList.writeObject(ArrayList.java:710)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:975)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at com.google.appengine.tools.development.SerializableObjectsOnlyHashSessionManager$SerializableObjectsOnlyHttpSession.checkCanSerialize(SerializableObjectsOnlyHashSessionManager.java:64)
... 40 more

我该如何解决这个问题? 谢谢...

最佳答案

可能 Query 没有从这里返回一个可序列化的列表对象:

Query q = em.createQuery("select t from XYZ t where t.id = :id");

q.setParameter("id", id);

     xyzlist = q.getResultList();  // 

注意:您可以将列表转换为已实现可序列化接口(interface)的 ArrayList
引用:http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

关于java - 如何解决 java.io.NotSerializableException : com. google.appengine.datanucleus.query.JPQLQuery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20561017/

相关文章:

java - @JsonView 不过滤属性(Spring 4.1.0.RC2,Jackson 2.3.2)

java - 为什么在 AppEngine/Java 中默认禁用并发请求?

java - HTTP 错误 : 503 when i run app-engine locally

java - GWT 程序有没有办法判断它是处于托管模式还是网络模式?

java - eclipse 中的 GWT 项目

java - ViewPager : OutOfResourcesException locking surface

Java 8 Nashorn - 将 engine.eval ("print(' hello world')) 捕获到 String 对象中?

java - 更改MapReduce(K,V)输出格式

google-app-engine - 不使用 App Engine 的原因

javascript - 如何避免在 GWT cache.js 文件中生成 document.write