2010-08-18 4 views
3

Я создал Data Class и храню данные с помощью PersistenceManager, но позже я редактировал свой класс данных, и теперь у меня проблема с данными общего доступа Я пытаюсь удалить эти объекты (pm.deletePersistent (е)), но I'have исключение:проблема с удалением объекта, используя PersistenceManager

javax.jdo.JDOUserException: Один или несколько экземпляров не могут быть удалены NestedThrowables: org.datanucleus.jdo.exceptions.ClassNotPersistenceCapableException: класс "класс" java.lang .Class "не сохраняется. Это означает, что он либо не был расширен, либо что расширенная версия файла не находится в CLASSPATH (или скрыта с помощью незакрепленной версии), либо метаданные/аннотации для класса не найдено. " не persistable

, что мой данные Класс:

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 (е) не работает, потому что класс задачи изменились (одно поле изменен тип от пользователя в строку)

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("[email protected]"); 
      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?

плз помощь

+0

приложите класс задач. Кстати, вы не хотели использовать deletePersistentAll, а не итератор? – Eugene

+0

да, я сделал это раньше, и это не сработало – qazah

+0

вы не могли бы отследить из этой строки 'if (results.iterator(). HasNext())' и опубликовать здесь содержимое *** результатов *** set , Также у вас есть усеченное сообщение об исключении, не могли бы вы опубликовать его в полной версии? С уважением
Eugene – Eugene

ответ

1
  1. Пробовали ли вы Flush() перед удаление?
    1. Вы попробовали определить e имеет тип класса, который хранится в памяти?

Кроме того, пост здесь полный код пожалуйста, или фрагмент кода, как минимум.

С уважением Евгений

Смежные вопросы