如果我有像类别A的pojo - > subcategoryA - >书的关系。 subcategoryA是父类别A的子元素。书是子类别A的孩子 在这种情况下,一切都在同一实体组内
如果我需要将'book'移动到另一个子类别-B。我需要删除子类别A和类别A,并重新创建categoryA - > subcategoryA - >没有书?并重新创建categoryb - > subcategoryb - >书,其他书,其他书3?
答案 0 :(得分:1)
如果'book是subategoryA的子项'并且您已通过将子类别A的键添加到book的键路径来建模,则需要删除/重新创建book,或者需要使用与subatagoryA相同的键创建子目录B. 。这会影响所有其他属于子文章A的孩子的书。
这是因为(引用了appengine docs:“在数据存储区中创建实体时会分配完整的密钥,而且其任何部分都不能更改。”)。
对我来说这两个解决方案看起来都很棘手,我建议你重新考虑你的设计。例如,您可以将subcatagoryA的键存储为单独属性中的单独字段。这也有一些缺点,你可以通过对数据进行非规范化并直接存储(部分)subatagoryA的数据来解决这个问题。
[编辑]
回答您的问题:小型实体组的缺点是您无法使用交易。这是否是一个问题取决于...是否真的需要书籍上的交易+((子)类别。当你想要改变你的非规范化数据时,会出现更大的非规范化问题。为此,你可以想出一个这样的计划: