【问题标题】:Linking vs creating a new object using GAE and JDO使用 GAE 和 JDO 链接与创建新对象
【发布时间】:2014-12-11 18:22:36
【问题描述】:

我正在使用 Google App Engine 和 JDO 数据存储构建网络服务。
一切都很好,我对这些部分如何组合在一起非常了解。

我遇到的问题如下:
当我插入一个具有未拥有的相关商店对象的新产品类时,即使该商店已经存在,它也会创建一个新的商店对象。

我希望发生的情况是,如果 json 与已存在的商店数据一起提交,它只会将新产品链接到现有商店,而不是创建具有新 id 的重复商店。

我尝试将@Unique(name = "STORE_COMPOSITE_IDX", members = {"key", "name"}) 添加到商店类中,认为如果名称已经存在,它将链接到该商店,但这不起作用。

如何让它发挥作用?

【问题讨论】:

    标签: java google-app-engine jdo


    【解决方案1】:

    如果您创建一个新对象,它没有身份,因此处于“TRANSIENT”状态。如果你将它传递给持久化机制,它将把它作为新的持久化(作为 makePersistent 的参数,或者作为传递给 makePersistent 的对象的字段)。

    如果您想链接到现有对象,您应该检索想要关联的现有对象 (pm.getObjectById),并将新对象的字段设置为该对象。在这种情况下,检索到的对象将处于 PERSISTENT 或 HOLLOW 状态。当您持久化其他对象时,它会找到存在的对象,因此只需在数据库中链接到它。

    阅读对象生命周期状态。全部在 JDO 规范或任何体面的 JDO 文档中(并且 GAE 文档不是“体面的 JDO 文档”)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      相关资源
      最近更新 更多