Appengine / Java - 持久化String

时间:2012-07-11 21:56:47

标签: google-app-engine persistence

我的目标是将String保留到数据存储区

final static PersistenceManager pm = PMF.get().getPersistenceManager();
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
        String s = "test";
        System.out.println(pm.makePersistent(s));
        PrintWriter pw = resp.getWriter();
        pw.write("Data Saved");
    }

不确定跟踪错误的原因

  

类“The class”java.lang.String“不可持久化。这意味着   它要么没有增强,要么增强版本   该文件不在CLASSPATH中(或由未增强的文件隐藏)   版本),或找不到该类的元数据/注释。“   是不可持续的。这意味着它要么没有增强,要么   该文件的增强版本不在CLASSPATH中(或者是   被未增强的版本隐藏),或类的元数据是   没找到。

     

引起:

     

org.datanucleus.jdo.exceptions.ClassNotPersistenceCapableException:   类“The class”java.lang.String“不可持久化。这意味着   它要么没有增强,要么增强版本   该文件不在CLASSPATH中(或由未增强的文件隐藏)   版本),或找不到该类的元数据/注释。“   是不可持续的。这意味着它要么没有增强,要么   该文件的增强版本不在CLASSPATH中(或者是   被未增强的版本隐藏),或类的元数据是   未找到。在   org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:241)     在   org.datanucleus.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:674)     在   org.datanucleus.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:694)     在com.arunraja101.SaveDataServlet.doGet(SaveDataServlet.java:91)

是否无法保留String对象?

2 个答案:

答案 0 :(得分:1)

查看文档:

http://db.apache.org/jdo/api20/apidocs/javax/jdo/PersistenceManager.html#makePersistent(java.lang.Object

您需要为其提供一个具有持久性的对象。使用JDO时,有一个增强器进程实际上会打开你的.class文件并修改它们以便它们可以被持久化。查看GAE文档以保留您的对象:

https://developers.google.com/appengine/docs/java/datastore/jdo/dataclasses

答案 1 :(得分:1)

您可以在数据存储区中保留String,但作为实体的一部分。您可以通过定义类来描述写入和读取数据存储区的实体。例如,这个document描述了如何使用JDO定义实体类。

该类指示将实体写入数据存储区时存储的字段以及写入的位置。如果没有这样的类,当您调用makePersistent(如示例代码中的情况)时,App Engine将不知道保存数据的位置,也不知道如何将其读回。