Google App Engine ClassNotPersistenceCapableException - PullRequest
0 голосов
/ 23 апреля 2010

У меня есть следующий класс:

import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import com.google.appengine.api.datastore.*;

@PersistenceCapable(identityType=IdentityType.APPLICATION)
public class PayPal_Message
{
  @PrimaryKey
  @Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
  private Long id;
  @Persistent
  private Text content;
  @Persistent
  private String time;

  public PayPal_Message(Text content,String time)
  {
    this.content=content;
    this.time=time;
  }

  public Long getId() { return id; }
  public Text getContent() { return content; }
  public String getTime() { return time; }
  public void setContent(Text content) { this.content=content; }
  public void setTime(String time) { this.time=time; }
}

Раньше он был в пакете и работал нормально, теперь я поместил все классы в пакет по умолчанию, что вызвало у меня эту ошибку:

org.datanucleus.jdo.exceptions.ClassNotPersistenceCapableException: класс "Класс" PayPal_Message "не является постоянным. Это означает, что он либо не был улучшен, либо что расширенная версия файла отсутствует в CLASSPATH (или является скрыт не расширенной версией), либо метаданные / аннотации для класса не найдены. " не является постоянным Это означает, что он либо не был улучшен, либо что расширенная версия файла отсутствует в CLASSPATH (или скрыта не расширенной версией), либо метаданные для класса не найдены. NestedThrowables: org.datanucleus.exceptions.ClassNotPersistableException: класс "PayPal_Message" не является постоянным. Это означает, что он либо не был улучшен, либо что расширенная версия файла отсутствует в CLASSPATH (или скрыта не расширенной версией), либо метаданные / аннотации для класса не найдены.

Что мне сделать, чтобы это исправить?

Ответы [ 3 ]

0 голосов
/ 27 апреля 2010

В итоге я положил их обратно в пакет, и теперь он работает нормально.

0 голосов
/ 28 апреля 2010

Объяснение: классы в пакете по умолчанию не видны / не импортируются классами внутри пакета.

Попробуйте следующие примеры:

public class Entity {}

(то есть без упаковки!) И

package persistence;

public class EntityManager {
    public static void main(String... args) {
        Entity entity = new Entity();
    }
}

Это работает? Нет? Как бы вы импортировали это? Это проблема, которая происходит за кадром!

0 голосов
/ 24 апреля 2010

Иногда я получал эти исключения без видимой причины.

Добавление пробела где-то в постоянном классе и перестройка исправили это для меня в прошлом. Понятия не имею, почему это происходит или почему восстановление исправляет это, но стоит хотя бы попытаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...