2013-11-14 1 views
1

안녕하세요. 엔티티 클래스에 @Entity 주석이 달려있어 Google 애플리케이션 엔진에서 JPA와 함께 유지 될 수 있습니다.JPA on google app engine 유형 ("XXX")은 엔티티의 형식이 아니지만이 작업에 필요합니다.

[INFO] --- maven-datanucleus-plugin:3.1.1:enhance (default) @ grabby-backend --- 
[INFO] DataNucleus Enhancer (version 3.1.1) : Enhancement of classes 
DataNucleus Enhancer completed with success for 1 classes. Timings : input=181 ms,  enhance=60 ms, total=241 ms. Consult the log for full details 

[ERROR] -------------------- 
[ERROR] Standard error from the DataNucleus tool +  org.datanucleus.enhancer.DataNucleusEnhancer : 
[ERROR] -------------------- 
[ERROR] Nov 14, 2013 5:00:01 PM org.datanucleus.enhancer.DataNucleusEnhancer <init> 
INFO: DataNucleus Enhancer for API "JPA" 
Nov 14, 2013 5:00:02 PM org.datanucleus.enhancer.DataNucleusEnhancer main 
INFO: DataNucleus Enhancer (version 3.1.1) : Enhancement of classes 
Nov 14, 2013 5:00:02 PM org.datanucleus.metadata.MetaDataManager loadFiles 
WARNING: Metadata file -enhancerName not found in CLASSPATH 
Nov 14, 2013 5:00:02 PM org.datanucleus.metadata.MetaDataManager loadFiles 
WARNING: Metadata file ASM not found in CLASSPATH 
Nov 14, 2013 5:00:02 PM org.datanucleus.enhancer.AbstractClassEnhancer save 
INFO: Writing class file "/Development/datagrabber-backend/grabby- backend/target/classes/com/appspot/datagrabby/model/entities/DataUrls.class" with enhanced  definition 
Nov 14, 2013 5:00:02 PM org.datanucleus.enhancer.DataNucleusEnhancer addMessage 
INFO: DataNucleus Enhancer completed with success for 1 classes. Timings : input=181 ms,  enhance=60 ms, total=241 ms. Consult the log for full details 

와 : 내 프로젝트를 빌드 및 컴파일 단계에서 내 기록에 내가 다음을 참조, 클래스를 향상시킬 수 받는다는 사용하고

@Entity 
public class DataUrls { 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Key key; 

private String postalCode; 

private List<String> urls; 

public Key getKey() { 
    return key; 
} 

public void setKey(Key key) { 
    this.key = key; 
} 

public String getPostalCode() { 
    return postalCode; 
} 

public void setPostalCode(String postalCode) { 
    this.postalCode = postalCode; 
} 

public List<String> getUrls() { 
    return urls; 
} 

public void setUrls(List<String> urls) { 
    this.urls = urls; 
} 
} 

:

내 클래스는 다음과 같습니다 설정은 다음과 같습니다 :

<plugin> 
      <groupId>org.datanucleus</groupId> 
      <artifactId>maven-datanucleus-plugin</artifactId> 
      <version>${datanucleus.jpa.version}</version> 

      <configuration> 
       <api>JPA</api> 
       <metadataIncludes>com/appspot/blabla/model/entities/*.class</metadataIncludes> 
       <verbose>true</verbose> 
       <enhancerName>ASM</enhancerName> 
      </configuration> 

      <dependencies> 
       <dependency> 
        <groupId>org.datanucleus</groupId> 
        <artifactId>datanucleus-core</artifactId> 
        <version>${datanucleus.jpa.version}</version> 
       </dependency> 
      </dependencies> 

      <executions> 
       <execution> 
        <phase>compile</phase> 
        <goals> 
         <goal>enhance</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

지속성 코드 :

public void persistDataURLs(DataUrls dataUrls){ 
     EntityManager em = EMF.getFactory().createEntityManager(); 
     em.persist(dataUrls); 
     em.close(); 
    } 

그러나 나는 다음과 같은 메시지 얻을 데이터베이스에 기록 할 때 :

Type ("XXX") is not that of an entity but needs to be for this operation 

나는 응용 프로그램이 증강 플러그인의 로깅 클래스가 있음을 알려 그러나 때문에 이런 말을하는 이유를 이해 향상된 이유가 궁금합니다.

+0

여기에 지속성 코드가 관련성이 있습니까? 왜냐하면 당신은 어떤 예외 (stack trace를 가지고있다)가 발생한다고 말한다. – DataNucleus

+0

maven을 통해 dev 서버를 실행하고 있기 때문에 stacktrace를 얻지 못했지만 persistence 코드를 추가했습니다. 내가 디버그에 들어가서 객체를 검사 할 때 jdoStateManager와 jdoDetachedState와 같은 JDO 물건이 많이 보인다. –

+0

원하는 경우 예외를 catch하여 스택 추적을 얻습니다. 또한 정보가 많은 로그가 있습니다 – DataNucleus

답변

1

오늘 같은 문제를두고 달렸습니다. 내가 공유 할 해결책을 찾으면 나는 알았다.

내 코드는 다른 유스 케이스 (분명히)를 제외하고 당신과 거의 동일했습니다. 문제는 persistence.xml 파일을 내가 유지하려고 시도했던 새 엔티티의 위치로 업데이트하는 것을 잊어 버렸습니다. 따라서 DN은 클래스를 엔티티로 인식하지 못했습니다.