【问题标题】:AppEngine: Cannot read persisted data from datastore in transactionAppEngine:无法从事务中的数据存储区读取持久数据
【发布时间】:2013-01-09 16:20:07
【问题描述】:

我正在 Google AppEngine 上编写一个同步服务,但有些东西并不适合我。我想要做的是同步一个实体项目(也许它需要被持久化,也许只是复制内容,谁知道),然后搜索一个项目类型的实体(可能与首先持久化的项目相同,但没有' t需要),然后用它来同步一个任务。 所有这些都需要在事务中发生,因此如果任务同步失败,项目也会被删除。

我写了几行代码来简单地测试和显示问题所在。 此代码完美运行,并显示“找到项目”。

    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();
    }

我总是看到“找不到项目...”。那么我到底怎么才能读取我刚刚持久化但尚未提交的对象呢?

顺便说一句:我正在使用 twig-persist 2.0 RC1 和最新的 AE SDK (1.7)。

所以我的问题是如何读取已在同一事务中保存的数据..?

【问题讨论】:

    标签: java google-app-engine transactions google-cloud-datastore


    【解决方案1】:

    你不能。您应该重新阅读 GAE 交易文档。

    简而言之:事务中的所有内容都会获得一致的数据存储“快照”视图,因此新写入不会出现在查询中。

    但是,您拥有持久化的项目对象,因此您应该使用它而不是查询一个。

    如果您需要进行查询,则需要手动将其与您在事务中创建的实体“加入”。

    【讨论】:

    • 我知道我正在处理数据存储的快照,并且添加另一个事务不会显示在我的结果中。但是,我在我的交易中所做的添加在我自己的交易中是可查询的,这是有道理的……手动加入,你的意思是创建一些缓存系统,当我进行查询时,如果有任何对象,我会手动扫描我的现金清单有资格?还是你的意思是别的?
    • 不,作为文档状态,dragonx 链接到上面,这不是快照隔离的工作方式。真正的问题是,您为什么要在单个事务中执行此操作?
    • 手动“加入”是指您可以搜索结果查询列表,但首先手动将新创建的实体添加到列表中。
    猜你喜欢
    • 2011-02-28
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多