Spring 将实体及其子资源作为一个事务或策略发布以删除孤立项

Spring 将实体及其子资源作为一个事务或策略发布以删除孤立项,spring,rest,spring-boot,spring-data-rest,orphan,Spring,Rest,Spring Boot,Spring Data Rest,Orphan,我有一个SpringBootRESTAPI。从概念上讲,我有两个实体,分别命名为场所和地址,其中一个场所必须有一个地址。 我的问题是,我必须先发布一个地址实体,然后使用地址实体的自链接发布我的场馆实体。 在我开始编写浏览器客户端代码之前,这似乎还不错。我不喜欢这样一个事实,即一旦地址被持久化到数据库中,在场馆被持久化之前,如果用户连接中断,我的数据库中就会有一个垃圾实体,因为它不会与任何东西相关联。在这些情况下,我可以通过删除刚创建的地址来编写客户端回滚代码,但是如果我的api被第三方使用,那么

我有一个SpringBootRESTAPI。从概念上讲,我有两个实体,分别命名为场所和地址,其中一个场所必须有一个地址。 我的问题是,我必须先发布一个地址实体,然后使用地址实体的自链接发布我的场馆实体。 在我开始编写浏览器客户端代码之前,这似乎还不错。我不喜欢这样一个事实,即一旦地址被持久化到数据库中,在场馆被持久化之前,如果用户连接中断,我的数据库中就会有一个垃圾实体,因为它不会与任何东西相关联。在这些情况下,我可以通过删除刚创建的地址来编写客户端回滚代码,但是如果我的api被第三方使用,那么我就有问题了。 是否有任何方法可以在发布父实体的同时发布所有子资源数据?
如果没有,是否有清理孤立记录的通用策略

这里有几个选项需要考虑

如果同一地址被张贴了两次,那么数据库中不应该有两条记录。确保这一点的方法是规范化地址输入,然后检查该地址是否已添加。如果已经添加,则返回409冲突或200 OK。如果实际上创建了一个新地址,那么您可以返回一个已创建的地址。您必须首先规范化数据,以便同一地址的多个变体不会导致多个条目。例如,在标准化时,将所有“史密斯街”和“史密斯街”以及“史密斯街”变为“史密斯街”。您可以将此逻辑应用于地址中的所有字段。然后,您可以检查该地址是否已在数据库中

如果这是太多的工作,那么在DB中考虑没有地址是它自己的表/集合。也许只是让地址成为场地中的一个字段。如果在某个时刻,代码需要从某个地点获取一个地址并将其放入自己的表中,那么当它出现时,就可以根据需要进行处理


另一个想法是提供一种同时将地点和地址作为输入的服务。也许你可以称之为VenureRequest。此对象将包含两个主要字段:地点和地址。该服务将向DB存储地址,然后再存储场馆。

是否担心用户在恢复连接后会再次添加相同的地址,从而导致相同的地址在DB中出现两次?或者是担心他们永远不会继续添加场地,因此他们已经添加的地址是无用的?担心他们不会继续添加场地,因此已经创建的地址是无用的,因为当他们再次尝试时,他们会一起提交所有相关数据,并且只会创建一个新地址,这很好,但是已经创建的地址仍然存在。