Objectify - com.googlecode.objectify.SaveException:保存错误:id不能为零

Mic*_*sky 1 java google-app-engine objectify

我在使用Objectify的Google App Engine项目中遇到以下错误:

[INFO] com.googlecode.objectify.SaveException: Error saving com.netbase.model.InsightDataSet@13b24628: id cannot be zero
[INFO]  at com.googlecode.objectify.impl.EntityMetadata.save(EntityMetadata.java:95)
[INFO]  at com.googlecode.objectify.impl.WriteEngine.save(WriteEngine.java:73)
[INFO]  at com.googlecode.objectify.impl.SaverImpl.entities(SaverImpl.java:60)
[INFO]  at com.googlecode.objectify.impl.SaverImpl.entity(SaverImpl.java:35)
[INFO]  at com.netbase.server.InsightManager.persistInsights(InsightManager.java:26)
[INFO]  at com.netbase.server.LongTestServlet.downloadAllInsightsAsTimeSeriesAndSend(LongTestServlet.java:140)
[INFO]  at com.netbase.server.LongTestServlet.doHelper(LongTestServlet.java:98)
[INFO]  at com.netbase.server.LongTestServlet.doPost(LongTestServlet.java:52)
Run Code Online (Sandbox Code Playgroud)

以下是我的java类的定义方式:

@com.googlecode.objectify.annotation.Entity
public class InsightDataSet {
    @com.googlecode.objectify.annotation.Id long id;
Run Code Online (Sandbox Code Playgroud)

这是我试图保存它的方式:

    InsightDataSet insightDataSet = new InsightDataSet(username, topicId, requestDate);
    ofy().save().entity(insightDataSet).now();
Run Code Online (Sandbox Code Playgroud)

Mic*_*sky 5

根据https://groups.google.com/forum/#!topic/objectify-appengine/aRRRQNILQb0,使用Objectify注释@Id标记的字段需要Long而不是long为了使Objectify自动生成Java对象的id.

所以我将我的类定义更改为:

@com.googlecode.objectify.annotation.Entity
public class InsightDataSet {
    @com.googlecode.objectify.annotation.Id Long id;
Run Code Online (Sandbox Code Playgroud)

这解决了这个问题.