将实体及其子资源作为孤儿的一项交易或策略



我有一个弹簧启动REST API。从概念上讲,我有2个名为"地点和地址"的实体,一个场地必须有一个地址。我的问题是我必须先发布一个地址实体,然后以地址实体的自我链接发布我的场地实体。这似乎还可以,直到我开始编写我的浏览器客户端。我不喜欢这样的事实:如果地址一直持续到数据库中,则发生了一些事情,在持续存在会场之前破坏了用户连接,我最终会在我的数据库中获得垃圾实体,因为它不会关联有任何东西。我可以通过删除刚刚创建的地址来编码我的客户在这些情况下回滚,但是如果我的API被第三方使用,那么我遇到了问题。有什么办法可以与发布父实体同时发布所有子资源数据?如果没有,是否有任何扫除孤儿记录的共同策略?

以下是思考的一些选择。

如果相同的地址发布了两次,则DB中不应有两个记录。确保这是将地址输入归一化的方法,然后检查是否已经添加了该地址。如果已经添加了返回409冲突或200个冲突。如果实际上创建了一个新地址,则可以返回创建的201。您必须首先将数据归一化,以使同一地址的多个变化不会引起多个条目。例如,当归一化时变成所有"史密斯街"以及"史密斯街"one_answers"史密斯·斯特"。进入"史密斯街"。您可以将此逻辑应用于地址中的所有字段。然后,您可以检查该地址是否已经在DB中。

如果这是工作太多的工作,请考虑没有地址为DB中的自己的表/收藏。也许只有地址是场地的一个领域。如果在某个时候,代码需要从场地进行地址并将其放在其表格中,那么在出现时可能会根据需要发生。

另一个想法是拥有一项将场所和地址作为输入的服务。也许您可以称其为VenueRequest。该对象将包含两个主要字段,即场地和地址。该服务将完成存储到DB的工作,然后是场地。

最新更新