这是我的简单实体:
import com.google.appengine.api.datastore.Key;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
@PersistenceCapable
public class Food {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key id;
@Persistent
private String name;
@Persistent
private String description;
public Key getId() {
return (id);
}
public void setId(Key id) {
this.id = id;
}
public String getName() {
return (name);
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return (description);
}
public void setDescription(String description) {
this.description = description;
}
}
我正在以这种方式加载我的食物列表:
try {
pm = PMF.get().getPersistenceManager();
Query q = pm.newQuery(Food.class);
foods = (List<Food>) q.execute();
} catch (Exception exc) {
exc.printStackTrace();
}
finally {
pm.close();
}
密钥是为每个食品实体自动生成的。我也在使用人力资源。所以。。。上面的查询(pm.newQuery(Food.class);)不是具有很强的一致性,一次是返回所有结果,第二次是不返回新创建的食物。如何以这样的方式更改此查询,以便每次我从数据库中获取所有食物时。在数据存储文档中,我读到应该是祖先查询,但我没有祖先路径。(我应该说我是数据存储的新手,仍在从昨天学习,但这一次花了我很多时间)。请帮助我。
两个关于 App 引擎数据存储的工作原理和强一致性的优秀且易于理解的视频:
第 1 部分:数据存储简介
https://www.youtube.com/watch?v=fQazhzcC-rg
第 2 部分:数据存储查询、索引和事务
https://www.youtube.com/watch?v=d4CiMWy0J70#t=645
如果不使用父级,则无法实现强一致性。这就是重点。要么你使用祖先,要么你接受有时你的查询结果会过时(并使用例如memcache来解决这个问题)。