我使用Google App Engine和JDO数据存储构建了一个Web服务 一切都运作良好,我对这些部分如何组合起来有很好的理解。
我遇到的问题如下:
当我插入一个具有无主关联商店对象的新产品类时,即使该商店已经存在,它也会创建一个新的商店对象。
我想要发生的事情是,如果json与已存在的商店数据一起提交,它只会将新产品链接到现有商店,而不是创建具有新ID的重复商店。
我尝试将@Unique(name = "STORE_COMPOSITE_IDX", members = {"key", "name"})
添加到商店类中,认为如果名称已经存在,则会链接到该商店,但这不起作用。
如何让它发挥作用?
答案 0 :(得分:0)
如果您创建一个新对象,它没有身份,因此在" TRANSIENT"州。如果将其传递给持久性机制,它将把它作为new持久化(作为makePersistent的参数,或作为传递给makePersistent的对象的字段)。
如果要链接到现有对象,则应检索要与其关联的现有对象(pm.getObjectById),并将新对象的字段设置为该对象。在这种情况下,检索到的对象将处于PERSISTENT或HOLLOW状态。当您持久保存其他对象时,它将找到现有对象,因此只需在数据库中链接它即可。
阅读对象生命周期状态。所有在JDO规范或任何体面的JDO文档(和GAE文档不是"体面的JDO文档")