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>