JPA Аннотация / Метаданные сопоставления для GAE

Я пытаюсь завершить моделирование для приложения, которое планирую развернуть на движке приложений Google.

У меня есть базовый класс, абстрактная учетная запись, аннотированная следующим образом:

@Entity
@MappedSuperclass
public abstract class Account {

    @Id
    private Key id;
    .....

У меня тогда есть 2 конкретных класса, AdministratorAccount:

@Entity
public class AdministratorAccount extends Account {

и CustomerAccount:

@Entity
public class CustomerAccount extends Account {

У меня также есть все 3, объявленные в моем файле persistence.xml.

Когда я пытаюсь сохранить CustomerAccount, я получаю ошибку 500:

org.datanucleus.exceptions.NoPersistenceInformationException: The class "com.nucleus.entitymodel.Account" is required to be persistable yet no Meta-Data/Annotations can be found for this class. Please check that the Meta-Data/annotations is defined in a valid file location.

Есть идеи, в чем может быть проблема? Я пытался следовать документации на сайте GAE для наследования JPA.

1 ответ

Решение

Обратите внимание на предупреждение Google о JPA, рассмотрите возможность перехода к Objectify или хранилищу данных низкого уровня.

На что ваше предупреждение говорит, что ваши классы сущностей JPA не улучшены. Хранилище данных Google работает на ядре данных и требует, чтобы классы были улучшены для сохранения. Это можно сделать с помощью плагина maven, например;

        <plugins>
        <!-- This plug-in "enhances" your domain model objects (i.e. makes them persistent for datanucleus) -->
        <plugin>
            <groupId>org.datanucleus</groupId>
            <artifactId>maven-datanucleus-plugin</artifactId>
            <version>${datanucleus.version}</version>
            <configuration>
                <fork>false</fork>
                <!-- Make sure this path contains your persistent classes! -->
                <mappingIncludes>**/model/*.class</mappingIncludes>
                <verbose>true</verbose>
                <enhancerName>ASM</enhancerName>
                <api>JPA</api>
            </configuration>
            <executions>
                <execution>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>enhance</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <!-- force maven-datanucleus-plugin to use the same version of datanucleus-core -->
                <dependency>
                    <groupId>org.datanucleus</groupId>
                    <artifactId>datanucleus-core</artifactId>
                    <version>${datanucleus.version}</version>
                </dependency>
            </dependencies>
        </plugin>
Другие вопросы по тегам