【发布时间】:2023-04-06 19:39:02
【问题描述】:
我无法找出使用 Google App Engine 更新“嵌套”数据的正确方法 和 JDO。我有一个RecipeJDO 和一个IngredientJDO。
我希望能够用新的成分列表完全替换给定配方实例中的成分。然后,当该配方被(重新)持久化时,任何先前附加的成分都将从数据存储中完全删除,新的成分将被持久化并与该配方相关联。
类似:
// retrieve from GAE datastore
RecipeJDO recipe = getRecipeById();
// fetch new ingredients from the user
List<IngredientJDO> newIngredients = getNewIngredients();
recipe.setIngredients(newIngredients);
// update the recipe w/ new ingredients
saveUpdatedRecipe(recipe);
当我直接更新(分离)配方对象时,这工作正常,从数据存储返回。但是,如果我复制一个RecipeJDO,然后进行上述更新,它最终会附加新成分,然后在从数据存储区重新获取配方时与旧成分一起返回。 (为什么还要麻烦复制?我在前端使用 GWT,所以我将 JDO 对象复制到 DTO,用户在前端对其进行编辑,然后将它们发送到后端进行更新数据存储。)
为什么我手动创建的对象(设置所有字段,包括 id)与对 PersistenceManager 返回的实例进行操作会得到不同的结果?明显地 JDO 的字节码增强以某种方式参与其中。
我最好在坚持更新之前明确删除旧成分 食谱?
(附带问题 - 有没有其他人对 ORM 感到沮丧并希望我们可以回到普通的旧 RDBMS?:-)
【问题讨论】:
标签: java google-app-engine orm jdo