Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 实体组_Java_Google App Engine_Jpa_Google Cloud Datastore_Datanucleus - Fatal编程技术网

Java 实体组

Java 实体组,java,google-app-engine,jpa,google-cloud-datastore,datanucleus,Java,Google App Engine,Jpa,Google Cloud Datastore,Datanucleus,我正在用google app engine进行一些试验,但缺少事务di框架。我正在尽可能好地实现它,但我一次又一次地遇到相同的异常: 不能在一个事务中对多个实体组进行操作。找到两个元素。。。 我已经阅读了文档(),但似乎无法理解它们的含义。 基本上我想做的是: 我有一个物品清单。我想检查它们是否已经在数据库中。如果它们相等,我将检查它们是否相等,如果不相等,则更新托管实例。否则我会坚持实体。 在我的对象循环(尚未持久化的对象)中,我使用EntityMananger.find()按Id查找实体。第

我正在用google app engine进行一些试验,但缺少事务di框架。我正在尽可能好地实现它,但我一次又一次地遇到相同的异常: 不能在一个事务中对多个实体组进行操作。找到两个元素。。。 我已经阅读了文档(),但似乎无法理解它们的含义。 基本上我想做的是:

我有一个物品清单。我想检查它们是否已经在数据库中。如果它们相等,我将检查它们是否相等,如果不相等,则更新托管实例。否则我会坚持实体。 在我的对象循环(尚未持久化的对象)中,我使用EntityMananger.find()按Id查找实体。第二次查找时会出现错误

我习惯于使用spring/hibernate(JPA)或EJB3环境,我以前从未见过这种情况。有谁能给我一个简单的解释,为什么我不能在同一个事务中找到两个相同类型的实体


根据我的记忆,不是搜索如何,而是搜索为什么…

,GAE数据存储根据实体的层次结构自动对实体进行分组。例如,如果您有一个用户的概念,并且您使所有其他对象类型(电子邮件、联系人等)都将用户作为父关系,那么GAE数据存储将所有这些对象视为同一组的一部分。如果与某个特定用户相关的数据似乎经常从某个特定位置获取,谷歌可以自动将其数据移动到离该位置较近的农场,以优化数据检索速度


困难在于,这意味着您必须将所有实体绑定到主父实体,或者必须避免跨绑定到不同父实体的对象执行事务。有时候,这并不是什么大不了的事情:在Gmail中,将联系人从一个用户帐户移动到另一个用户帐户并不是你所期望的那种原子事务。其他时候,它可能是一个真正的拖累。

实体组是一个简单的概念。应用程序引擎中的实体具有祖先。例如,你可以为书籍和作者做模型

Author:name->X和Author:name->Y是Author类型中的两个实体。书籍是另一种类型(种类只是实体的逻辑分组)。书籍和作者之间的关系可以建模为父子关系

例如

Book:name->B1,B2可能是作者:name->X写的。所以您将它们建模为:

作者:姓名->X是两本书的父项:姓名->B1,B2。类似地,Book:name->B3由Author:name->Y编写,因此可以将这种关系建模为Author:name->Y是Book:name->B3的父级

当您尝试在图书种类上进行交易时,您不能同时在B1、B3和B3上进行交易。因为他们参与不同的父子关系。每个祖先-子关系都是一个实体组。一次只能“锁定”一个实体组


希望这能让事情变得更清楚。

所以当我有一个实体与其他实体没有关系时,所有这些都将是一个单一的组。我需要做的是为我的所有实体添加公共关系。(以1对多的形式?)这似乎有点没用,但我会尝试一下。谢谢