gpt4 book ai didi

java - 无法围绕 appengine 数据存储持久性

转载 作者:行者123 更新时间:2023-11-29 08:17:53 25 4
gpt4 key购买 nike

我遇到过“无法在单个事务中对多个实体组进行操作”。使用带有 JDO 的 APPENGINE FOR JAVA 和以下代码时出现问题:

PersistenceManager pm = PMF.get().getPersistenceManager();

Query q = pm.newQuery("SELECT this FROM "+ TypeA.class.getName() + "WHERE userId == userIdParam "); q.declareParameters("String userIdParam"); List poos = (List) q.execute(userIdParam);

for (TypeA a : allTypeAs) { a.setSomeField(someValue); } pm.close();

问题似乎是我不能同时对多个实体进行操作,因为它们在事务中不在同一个实体组中。尽管我似乎不在进行交易,但 appengine 会生成一个,因为我在我的 jdoconfig.xml 中设置了以下内容:

   <property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>

很好。到目前为止,我想我明白了。

但是 - 如果我将上面代码中的 TypeA 替换为 TypeB - 我不会收到错误。我不相信 a 型和 b 型之间有什么不同——它们都具有相同的 key 结构。他们确实有不同的领域,但这应该无关紧要,对吧?

我的问题是 - TypeA 和 TypeB 之间可能有什么不同,它们给出了这种不同的行为?因此,我从根本上误解了这种行为甚至可能存在……

谢谢。

最佳答案

我并没有经常使用 App Engine,但据我所知,实体组被定义为具有根(树)的对象层次结构。如果您的 TypeB 对象有一个也是 TypeB 的子属性,则它们可能都在同一个实体组中。同样,如果他们都是其他类型的 child 。

如果不是这种情况,您可能需要分离从选择中获得的对象列表,修改每个对象,然后为每个对象创建一个新事务以将它们一一保存。
看看updating using detach (本小节末尾的较长示例)。

关于java - 无法围绕 appengine 数据存储持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2987668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com