Java 有没有办法使用JDO在GAE/J中拥有一个非持久性字段?
我希望问题不是孩子,因为我必须独立操作它,我不想保留问题字段,我想通过手动检索问题来填充它。这是代码 javaJava 有没有办法使用JDO在GAE/J中拥有一个非持久性字段?,java,google-app-engine,jdo,Java,Google App Engine,Jdo,我希望问题不是孩子,因为我必须独立操作它,我不想保留问题字段,我想通过手动检索问题来填充它。这是代码 java @PersistenceCapable(identityType = IdentityType.APPLICATION) public class Questionnaire{ //supposedly non-persistent public List<Question> questions = new ArrayList<Question>
@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;
@PersistenceCapable(identityType=identityType.APPLICATION)
公共课问卷{
//假定非持久性
公共列表问题=新建ArrayList();
@主键
@持久性(valueStrategy=IdGeneratorStrategy.IDENTITY)
公共长问卷;
@持久的
公共字符串标题;
@持久的
私人物品;
@持久的
公共字符串描述;
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(){
}
@PersistenceCapable(identityType=identityType.APPLICATION)
公开课问题{
//也不是持久性的
public ArrayList choiceList=new ArrayList();
@主键
@持久性(valueStrategy=IdGeneratorStrategy.IDENTITY)
公共长问卷;
@持久的
公共字符串文本;
@持久的
公共长问卷;
公众问题({
}
会说出这个错误:
org.datanucleus.store.appengine.MetaDataValidator$DatastoreMetaDataException:com.ivanceras.server.Question.questionID的元数据中出现错误:不能有java.lang.Long主键且不能是子对象(所属字段为com.ivanceras.server.questionly.questions)。添加
@NotPersistent
可能会有所帮助
GAE/J文档完全是误导性的;它们建议您在每个字段上都需要@Persistent
,这是完全错误的。所有字段都有一个默认的Persistent标志,字符串
、原语、集合
、列表
、设置
、映射
等默认情况下都是持久的,因此不需要@Persistent
。这一点已经向谷歌提出了好几次,但文档中仍然有这一点
如果您希望根据JDO规范获得清晰的信息,请使用DataNucleus文档添加
@NotPersistent
可能会有所帮助
GAE/J文档完全是误导性的;它们建议您在每个字段上都需要@Persistent
,这是完全错误的。所有字段都有一个默认的Persistent标志,字符串
、原语、集合
、列表
、设置
、映射
等默认情况下都是持久的,因此不需要@Persistent
。这一点已经向谷歌提出了好几次,但文档中仍然有这一点
如果您希望根据JDO规范获得清晰的信息,请使用DataNucleus文档添加“transient”也可能有帮助添加“transient”也可能有帮助