0

我不打算让问题成为孩子,因为我必须独立操作它,而且我不想保留问题字段,我会通过手动检索问题来填写它。这是代码。

问卷调查.java

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Questionnaire{
    //supposedly non-persistent
    public List<Question> questions  = new ArrayList<Question>();

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    public Long questionnaireID;

    @Persistent
    public String title;

    @Persistent
    private int items;

    @Persistent
    public String description;

问题.java

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Question{
    //non-persistent as well
    public ArrayList<Choice> choiceList = new ArrayList<Choice>();

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    public Long questionID;

    @Persistent 
    public String text;

    @Persistent 
    public long questionnaireID;


    public Question(){

    }

会吐出这个错误:

org.datanucleus.store.appengine.MetaDataValidator$DatastoreMetaDataException:com.ivanceras.server.Question.questionID 的元数据错误:不能有 java.lang.Long 主键并且是子对象(拥有字段是 com.ivanceras .server.Questionnaire.questions)。

4

2 回答 2

5

添加一个@NotPersistent可能会有所帮助。

GAE/J 文档完全具有误导性;他们建议您@Persistent在每个领域都需要,这是完全错误的。所有字段都有一个默认的持久标志......像String,原语,,,,,默认情况下是持久的Collection,所以不需要那些。这一点已经多次向谷歌提出,但文档仍然有这个。ListSetMap@Persistent

如果您想按照 JDO 规范获得清晰的信息,请使用 DataNucleus 文档

于 2010-01-04T08:42:26.840 回答
0

添加“瞬态”也可能有帮助

于 2012-07-06T18:22:57.917 回答