【问题标题】:problem with deleting object, using PersistenceManager使用 PersistenceManager 删除对象的问题
【发布时间】:2011-03-31 12:15:46
【问题描述】:

我创建了数据类并使用 PersistenceManager 存储数据,但后来我编辑了我的数据类,现在我遇到了共享数据的问题 我正在尝试删除这些对象 (pm.deletePersistent(e)) 但我有异常:

javax.jdo.JDOUserException: 无法删除一个或多个实例 NestedThrowables: org.datanucleus.jdo.exceptions.ClassNotPersistenceCapableException: 类“类”java.lang.Class“不可持久。这意味着它要么尚未增强,或文件的增强版本不在 CLASSPATH 中(或被未增强版本隐藏),或找不到该类的元数据/注释。”不可持久

那是我的数据类:

import com.google.appengine.api.datastore.Key;
import java.util.ArrayList;
import java.util.Date;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

@PersistenceCapable

public class Task {
        @PrimaryKey
        @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
        private Key key;

    @Persistent
    private String author;

    @Persistent
    private String task;

    @Persistent
    private Date date;

    @Persistent
    private String note;

    @Persistent
    private ArrayList<String> label; 

    @Persistent
    private int numberoflist;





    public Task (String author, String task,String note, Date date, int numberoflist)
    {
        this.author=author;
        this.task=task;
        this.date=date;
        this.numberoflist=numberoflist;
        this.note=note;
    }

这是我的 .jsp 文件,但 deletePersistentAll(Task.class) 或 pm.deletePersistent(e) 不起作用,因为类 Task 已更改(一个字段将类型从 User 更改为 String)

 try{                   
        PersistenceManager pm = PMF.get().getPersistenceManager();  
        pm.flush();
        Query query = pm.newQuery(Task.class);
        query.declareParameters("String authorParam");
        List<Task> results = (List<Task>) query.execute("user@mail");
            try
            {
                 if (results.iterator().hasNext())
                 {
                    for (Task e : results) 
                    {
                      pm.deletePersistent(e);
                      %>
                      <p><%= e.getTask() %> </p>
                      <%
                    }
                 }else 
                     {
                       %> 
                       <p>Empty</p>
                       <% 
                     }
              } finally {
                query.closeAll();}
           pm.close();

       }catch(Exception ex) {...}

异常:java.lang.ClassCastException:java.lang.String 无法转换为 com.google.appengine.api.users.User

我应该怎么做才能清除 PersistenceManager 中的所有数据?

请帮忙

【问题讨论】:

  • 请附上任务类。顺便说一句,您介意使用 deletePersistentAll 方式而不是迭代器吗?
  • 是的,我以前做过,但没有用
  • 您是否介意从if (results.iterator().hasNext()) 这一行追踪并在此处发布 results 集的内容。你也有截断异常消息,你能把它发布成完整版吗?问候
    尤金

标签: java jsp jdo


【解决方案1】:
  1. 您之前尝试过 flush() 删除?
    1. 您是否尝试确定 e 有 pm 存储的类类型?

另外,请在此处发布完整代码,或者至少使用 sn-p。

问候 尤金

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2011-08-12
    • 2011-02-27
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多