Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 应用程序引擎,can';t在单个交易中操作多个实体组_Java_Google App Engine - Fatal编程技术网

Java 应用程序引擎,can';t在单个交易中操作多个实体组

Java 应用程序引擎,can';t在单个交易中操作多个实体组,java,google-app-engine,Java,Google App Engine,当我尝试在一个事务中更新多个对象时,我收到以下异常: java.lang.IllegalArgumentException:无法在单个事务中对多个实体组进行操作。找到了两个元素{ 类型:“消息” 身份证号码:51 } 和元素{ 类型:“消息” 身份证号码:52 } 这很奇怪,因为事务中的所有对象都共享一个共同的祖先 打印列表时,我收到以下信息: [ 站点ID:2消息ID:50消息创建人:north@gmail.com创建日期:2012年5月4日星期五05:38:32 UTC, 站点ID:2消息I

当我尝试在一个事务中更新多个对象时,我收到以下异常:

java.lang.IllegalArgumentException:无法在单个事务中对多个实体组进行操作。找到了两个元素{ 类型:“消息” 身份证号码:51 } 和元素{ 类型:“消息” 身份证号码:52 }

这很奇怪,因为事务中的所有对象都共享一个共同的祖先

打印列表时,我收到以下信息:

[ 站点ID:2消息ID:50消息创建人:north@gmail.com创建日期:2012年5月4日星期五05:38:32 UTC, 站点ID:2消息ID:51消息创建人:north@gmail.com创建日期:2012年5月4日星期五05:38:32 UTC, 站点ID:2消息ID:52消息创建人:north@gmail.com创建日期:周五5月4日05:38:32 UTC 2012 ]

如您所见,所有三条消息记录都会查找到id为2的同一父站点。根据这个例子,这意味着消息在同一个实体组中,所以我似乎不应该得到这个异常


非常感谢您的帮助。

在尝试更新多个项目时,我遇到了相同的错误。解决方法-我将其移动到不同的事务。我认为不可能在单个事务中更新多个项目。

如果不看一些源代码,我们真的帮不上忙。你能举一个最简单的例子来重现这个问题吗?除了上面@Nick的请求之外,最可能的解释是你的两个
消息
持久实体(ID 51和52)确实在不同的实体组中。Nick和Ian,感谢你的回复。在我开始为一篇文章提取代码之前,你能解释一下实体是如何保存在同一个组中的吗?我的理解是,如果它们都查找到另一个对象,则它们是同一实体组的一部分。在我的例子中,“lookup”意味着消息对象有一个持久字段Long siteId,我在insert上设置了这个字段。我认为您必须明确组的连接(使用祖先查询检索对象或使用指定的父对象构建它)。使用直接引用似乎不起作用。另一种解决方法是执行以下操作:[1]将此属性添加到jdoconfig.xml文件、属性'name=“datanucleus.appengine.datastoreEnableXGTransactions”value=“true”/>,以及[2]编辑运行配置以启用高复制数据存储,转到运行>运行配置>应用程序引擎>HRD配置>检查“启用本地HRD支持”。我还没有机会了解启用HRD的全部含义。更正,属性应该是:将此属性添加到persistence.xml,默认情况下启用了HDR。但这并不能解决问题:(