AppEngine: не удается прочитать сохраненные данные из хранилища данных в транзакции

Я пишу службу синхронизации в Google AppEngine, но что-то на самом деле не работает для меня. То, что я хочу сделать, - это синхронизировать сущность Project (возможно, ее нужно сохранить, возможно, просто скопировать контент, кто знает), а затем искать объект типа Project (может быть, тот же проект, что и вначале, но не " t должен быть), а затем использовать его для синхронизации задачи. Все это должно произойти в транзакции, поэтому, если синхронизация задачи завершится неудачей, проект также будет удален.

Я написал несколько строк кода, чтобы просто проверить и показать, что не так. Этот код отлично работает и показывает мне «Project Found».

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

Я всегда вижу «Проект не найден ...». Так как, черт возьми, я могу прочитать объект, который я только что сохранил, но еще не совершил?

BTW: Я использую twig-persist 2.0 RC1 и последний AE SDK (1.7).

Поэтому мой вопрос в том, как я могу прочитать данные, которые были сохранены в одной транзакции.?

0
nl ja de

1 ответы

Вы не можете. Вы должны перечитать документацию по транзакции GAE.

Вкратце: все внутри транзакции получает согласованное представление о «снимке» того, как выглядит хранилище данных, поэтому новые записи не будут отображаться в запросах.

Однако у вас есть объект проекта, который вы сохраняете, поэтому вы должны использовать это вместо запроса.

Если вам нужно выполнить запрос, вам нужно вручную «присоединить» его к объектам, созданным в транзакции.

0
добавлено
Ручным «join» я имею в виду, что вы можете выполнить поиск по списку результатов запроса, но сначала добавить вновь созданный объект в список вручную.
добавлено автор dragonx, источник
Нет, поскольку состояние документов, с которыми связан dragonx выше, это не то, как работает изоляция моментальных снимков. Реальный вопрос: почему вы хотите сделать это в одной транзакции?
добавлено автор John Patterson, источник
Я понимаю, что я работаю над снимком хранилища данных, и что добавление в другой транзакции не будет отображаться в моих результатах. Но было бы разумно, что добавление, которое я делаю в своих транзакциях, возможно для запросов в моей собственной транзакции ... При объединении вручную вы подразумеваете создание некоторой системы кэширования, когда я делаю запрос, который я просматриваю вручную в своем кассовом листе, если какой-либо объект квалифицируется? Или вы имеете в виду что-то еще?
добавлено автор dirkvranckaert, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async

Google Cloud Platform_ru
Google Cloud Platform_ru
49 участник(ов)

Русскоязычное обсуждение google_cloud_pladform