1

こんにちは、 @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

アプリケーションがこれを言っている理由は理解できますが、エンハンサー プラグインのログはクラスが強化されていることを通知するので、なぜこれが起こっているのだろうかと思います。

4

1 に答える 1

1

今日、この同じ問題に遭遇しました。私が共有する解決策を見つけたら、私は考えました。

私のコードは、ユースケースが異なることを除けば、あなたのコードとほとんど同じでした(明らかに)。問題は、永続化しようとしていた新しいエンティティの場所で persistence.xml ファイルを更新するのを忘れていたことです。したがって、DN がクラスをエンティティとして認識しなかった理由です。

于 2015-09-01T20:07:08.880 に答える