首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交叉组(XG)事务中有5个以上的实体组

交叉组(XG)事务中有5个以上的实体组
EN

Stack Overflow用户
提问于 2012-11-14 07:39:25
回答 1查看 384关注 0票数 1

背景:

我最近在GAE SDK 1.7.3中更新到了JDO 2.0 / Datanucleus 3.1.1。我有二级缓存到memcache,当我对子实体执行某些操作时,我发现在缓存中看到了陈旧的数据。例如,当我从一个集合中删除一些子项,然后在片刻之后添加新的子项,然后它会更新数据存储,但不会更新缓存,因此后续的读取会发回过时的数据。

无论如何,这是一个单独的问题-我的解决方法是将更新放在一个事务中,这样缓存条目就会失效并被删除(事务不会将更改写入memcache)。

这是可行的。然而,我有相当多的无主关系,所以有时我会更新5个以上的实体组-例如,我做了一个批量标记操作,将整个加载的行标记为“完成”。奇怪的是,尽管在Google文档中明确表示XG事务仅限于5个实体组,但IT工作正常。我是不是漏掉了什么?

我还应该提到的是,我还没有显式地为JDO启用XG事务-同样,它似乎是有效的。日志表明,它实际上正在进行事务处理。

我只是有点困惑。这可能会在未来停止工作吗?JDO是否以某种方式管理事务的大小?XG事务是由最新的JDO自动管理的,还是默认打开的?

EN

回答 1

Stack Overflow用户

发布于 2012-11-14 09:10:08

我不确定这是不是一个答案,但我可以告诉你,5个实体组的限制肯定是强制的(或者至少在SDK 1.7.1中是强制的),因为我已经和它斗争过很多次了。

首先,您确定您的jdoconfig.xml中没有类似以下内容的内容:

代码语言:javascript
复制
<property name="datanucleus.appengine.datastoreEnableXGTransactions" value="true"/>

我的模型中还有许多无主关系,我绕过实体组限制的解决方案是将几个对象放在同一个实体组中。基本上,我有一些类似的东西:

代码语言:javascript
复制
X -- has a -- A
  \- has a -- B
  \- has a -- C

但A也是B的父级,B是C的父级-因此只有2个实体组,即使所有与X的关系都标记为@Unowned。

顺便说一句,这也意味着你只需要持久化A。

因为你没有分享你的对象模型的任何细节,所以我不能说这是不是像你所拥有的那样……

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13370783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档