こんにちは、 @Entity でアノテーションが付けられたエンティティ クラスがあるので、Google アプリ エンジンで JPA を使用して永続化できます。
私のクラスは次のようになります。
@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;
}
}
私はmavenを使用してプロジェクトをビルドし、コンパイル段階でクラスを拡張しています。ログに次のように表示されます。
[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
Maven の構成は次のようになります。
<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
アプリケーションがこれを言っている理由は理解できますが、エンハンサー プラグインのログはクラスが強化されていることを通知するので、なぜこれが起こっているのだろうかと思います。