有没有办法在GAE / J中使用JDO获得非持久性字段?

时间:2010-01-04 04:58:30

标签: java google-app-engine jdo

我打算不要小孩子,因为我必须独立操纵它,而且我不想坚持问题领域,我会通过手动检索问题来填补它。这是代码。

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)。

2 个答案:

答案 0 :(得分:5)

添加@NotPersistent可能有所帮助。

GAE / J文件完全具有误导性;他们建议你在每个领域都需要@Persistent,这是完全错误的。所有字段都有默认持久性标记... String,基元,CollectionListSetMap等内容默认为持久标记,因此不需要对于那些@Persistent。这一点已经向Google多次提出,但文档仍然有这个。

如果您需要符合JDO规范的明确信息

,请使用DataNucleus文档

答案 1 :(得分:0)

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