Я столкнулся с «не может работать с несколькими группами объектов в одной транзакции». проблема при использовании APPENGINE FOR JAVA w/JDO со следующим кодом:Невозможно обернуть голову вокруг сохранения хранилища данных в Appengine
PersistenceManager pm = PMF.get(). getPersistenceManager();
Query q = pm.newQuery ("SELECT this FROM" + TypeA.class.getName() + "WHERE userId == userIdParam"); q.declareParameters ("String userIdParam"); Список poos = (Список) q.execute (userIdParam);
для (TypeA a: allTypeAs) { a.setSomeField (someValue); } pm.close(); }
Проблема заключается в том, что я не могу работать с несколькими объектами одновременно, в то время как b/c они arent в одной и той же группе сущностей во время транзакции. Несмотря на то, что не кажется, что я нахожусь в сделке, AppEngine генерирует один, потому что я следующий набор в моем jdoconfig.xml:
<property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
Fine. До сих пор, я думаю, я понимаю.
НО - если я заменю TypeA в приведенном выше коде, с TypeB - я не получу ошибку. Я не верю, что между типом a и типом b существует что-то другое: они имеют одну и ту же ключевую структуру. У них разные поля, но это не имеет значения, не так ли?
Мой вопрос: что может быть различным между TypeA и TypeB, что они дают это другое поведение? И, следовательно, что вы принципиально неправильно понимаете, что такое поведение может даже существовать ....
Спасибо.
Использование autoCreateDatastoreTxns - это, вероятно, плохая идея, именно по той причине, что ваш пост контур. –
Я думал, что это рекомендуемая настройка из документации appengine. – aloo
«Конфигурация JDO мы рекомендуем использовать свойства с именем datanucleus.appengine.autoCreateDatastoreTxns для true. Это свойство, специфичное для App Engine, которое сообщает реализации JDO связывать транзакции хранилища данных с транзакциями JDO, которые управляются кодом приложения. строят новое приложение с нуля, это, вероятно, то, что вы хотите ». – aloo