2010-04-23 2 views
0

나는 다음 클래스가 있습니다, 지금은 기본 패키지의 모든 클래스를 넣어구글 앱 엔진 ClassNotPersistenceCapableException

그것은 패키지로 사용하고, 잘 작동
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에 없거나 확장되지 않은 버전으로 숨겨져 있거나 클래스의 메타 데이터/주석을 찾을 수 없습니다.

문제를 해결하려면 어떻게해야합니까?

+1

왜 기본 패키지에 넣으시겠습니까? 이유를 위해 패키지를 사용하는 것이 가장 좋은 방법입니다. –

답변

0

설명 : 기본 패키지의 클래스는 패키지 내의 클래스에서 표시하거나 가져올 수 없습니다. (! 따라서 패키지없이)

public class Entity {} 

package persistence; 

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

그것은 작동합니까 :

은 다음 예를보십시오? 아니? 어떻게 가져 왔습니까? 그것은 그 뒤에서 일어나는 문제입니다!

+0

하지만 기본 패키지에있는 "ALL"calsses를 기본 패키지에 넣었습니다. 왜 작동하지 않을 수 있습니까? – Frank

+0

사용중인 persistence API (이 경우 Datanucleus)가 기본 패키지를 사용하고 있지 않기 때문에. 문자 그대로 위의 코드는 아니지만 "장면 뒤에서"일어나는 일입니다. 에있는 다른 패키지의 기본 패키지에있는 클래스에 액세스 할 수 없습니다. – BalusC

+0

OK, 감사합니다. – Frank

0

가끔씩 이러한 예외가 발생했습니다.

영구 클래스의 어딘가에 공간을 추가하고 다시 작성하면 과거에 나를 위해 그것을 고쳤습니다. 왜 그런 일이 일어나는지, 왜 재건축이 그것을 고쳐야하는지는 알지 못하지만 적어도 가치는 있습니다.

0

패키지에 다시 넣었습니다. 이제 제대로 작동합니다.