Java google应用程序引擎类型(“XXX”)上的JPA不是实体的JPA,但需要用于此操作

Java google应用程序引擎类型(“XXX”)上的JPA不是实体的JPA,但需要用于此操作,java,google-app-engine,maven,jpa,datanucleus,Java,Google App Engine,Maven,Jpa,Datanucleus,嗨,我有一个用@entity注释的实体类,所以它可以在google app engine上用JPA持久化 我的班级是这样的: @Entity public class DataUrls { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Key key; private String postalCode; private List<String> urls; public Key getKey(

嗨,我有一个用@entity注释的实体类,所以它可以在google app engine上用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;
}
}
<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>
但是,当我尝试写入数据库时,会收到以下消息:

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

我理解应用程序为什么会这样说,但是由于增强器插件的日志记录通知类已增强,我想知道为什么会发生这种情况。

我今天遇到了同样的问题。我想一旦我找到了解决方案,我会和大家分享


除了一个不同的用例(显然),我的代码与你的代码几乎相同。问题是我忘记了用我试图持久化的新实体的位置更新persistence.xml文件。因此,DN没有将类识别为实体的原因。

我今天遇到了同样的问题。我想一旦我找到了解决方案,我会和大家分享


除了一个不同的用例(显然),我的代码与你的代码几乎相同。问题是我忘记了用我试图持久化的新实体的位置更新persistence.xml文件。因此,DN没有将类识别为实体的原因。

也许您的持久性代码与此相关?由于您说它会导致一些异常(也有堆栈跟踪),因为我是通过maven运行dev服务器的,所以没有堆栈跟踪,不过我添加了持久性代码。当我进入调试并检查对象时,我会看到很多JDO的东西,比如jdoStateManager和jdoDetachedState。如果需要,可以通过捕获异常获得堆栈跟踪。您还拥有一个包含大量信息的日志。类“com.appspot.blabla.model.entities.DataUrls”必须是可持久的,但找不到该类的元数据/注释。请检查元数据/注释是否定义在有效的文件位置。因此,通过反编译检查类的增强,并检查类路径中的内容;日志会告诉您在什么位置有什么。通过持久性代码进行反编译可能与此相关?由于您说它会导致一些异常(也有堆栈跟踪),因为我是通过maven运行dev服务器的,所以没有堆栈跟踪,不过我添加了持久性代码。当我进入调试并检查对象时,我会看到很多JDO的东西,比如jdoStateManager和jdoDetachedState。如果需要,可以通过捕获异常获得堆栈跟踪。您还拥有一个包含大量信息的日志。类“com.appspot.blabla.model.entities.DataUrls”必须是可持久的,但找不到该类的元数据/注释。请检查元数据/注释是否定义在有效的文件位置。因此,通过反编译检查类的增强,并检查类路径中的内容;日志会告诉您在什么位置有什么。通过
    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