我打算不要小孩子,因为我必须独立操纵它,而且我不想坚持问题领域,我会通过手动检索问题来填补它。这是代码。
Questionnaire.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;
Question.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)。
答案 0 :(得分:5)
添加@NotPersistent
可能有所帮助。
GAE / J文件完全具有误导性;他们建议你在每个领域都需要@Persistent
,这是完全错误的。所有字段都有默认持久性标记... String
,基元,Collection
,List
,Set
,Map
等内容默认为持久标记,因此不需要对于那些@Persistent
。这一点已经向Google多次提出,但文档仍然有这个。
如果您需要符合JDO规范的明确信息
,请使用DataNucleus文档答案 1 :(得分:0)
添加“瞬态”也可能有所帮助