我正在Google AppEngine上编写同步服务,但某些事情对我来说并不真正起作用。我想要做的是同步一个实体项目(也许它需要被持续,也许只是复制内容,谁知道),然后搜索一个项目类型的实体(可能与第一个项目一样,但没有' t需要)然后用它来同步任务。 所有这些都需要在事务中发生,所以如果任务同步失败,该项目也会被删除。AppEngine:无法从事务中的数据存储中读取持久数据
我写了一些代码行来简单地测试和显示出了什么问题。 此代码完美工作,并向我展示“找到项目”。
User user = userDao.findAll().get(0);
// Create a setup service...
Project project = new Project();
project.setName("TEST ABC");
project.setLastUpdated(new Date());
project.setUser(user);
projectDao.persist(project);
Project persistedProject = projectDao.find("TEST ABC", user);
if (persistedProject == null) {
System.out.println("Project not found...");
} else {
System.out.println("Project found!");
}
所以在这里我不使用交易。但是,当我执行与交易的代码:
User user = userDao.findAll().get(0);
Transaction tx = datastores.get().beginTransaction();
// Create a setup service...
Project project = new Project();
project.setName("TEST ABC");
project.setLastUpdated(new Date());
project.setUser(user);
projectDao.persist(project);
Project persistedProject = projectDao.find("TEST ABC", user);
if (persistedProject == null) {
System.out.println("Project not found...");
tx.rollback();
} else {
System.out.println("Project found!");
tx.commit();
}
我总是看到“项目未找到...”。那么,我到底能够读到一个我刚刚坚持下来的对象,但还没有犯下呢?
顺便说一句:我使用树枝坚持2.0 RC1和最新的AE SDK(1.7)。
所以我的问题是我怎样才能读取持续在同一交易中的数据..?
据我所知,我正在处理数据存储的快照,并且在另一个事务中添加的内容不会显示在我的结果中。但它是有道理的,增加我在我的交易中做的查询能够在我自己的交易中... 手动加入,你的意思是创建一些缓存系统,当我做一个查询,我手动扫描我的现金列表if任何对象符合?或者你的意思是别的? – dirkvranckaert
不,作为文档状态,哪个dragonx链接到上面,这不是快照隔离的工作方式。真正的问题是,为什么你想在一次交易中做到这一点? –
通过手动“加入”我的意思是你可以搜索你的结果查询列表,但首先手动添加新创建的实体。 – dragonx