我正在使用带有 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/