在JPA/Hibernate(Spring启动应用程序)中,当实体中不存在@OnetoMany时,从数据库中删除子记录



我正在用JPA/Hibernate开发一个Spring Boot web应用程序。该应用程序接收JSON格式的数据记录,这些记录被映射到@Entity类。Layout相当简单,它有一个带有一组子实体的主实体类。我通过@OneToMany/@ManytoOne绘制这些地图。解析、从数据库读取数据、在数据库中插入/更新数据都可以使用JpaRepository的默认存储库功能。。。。

问题是,当我收到必须更新的记录时,我只想存储请求附带的那些子记录。如果存在其他子记录,这些子记录先前存储在父记录中,但不存在于请求的当前记录中,则它们具有要从数据库中删除。

我的想法是通过将子记录集与从数据库中收到的子记录集进行比较,将不存在的子记录放入列表中并删除它们,然后保留实体。另一种选择是首先删除所有子记录,然后保留新实体。。。。

我现在的问题是:没有比JPA/Hibernate更优雅的方法来实现这一点吗。一些注释或选项或其他什么。我还没有找到任何适合我的方法。你的想法是什么?

更新:我的问题不是先删除父实体,然后再删除子记录。父实体保持原样(或更新…(。我只想删除子记录,只想删除那些不在当前请求实体中但在数据库中的子记录。

例如:在父表的数据库中是parentID为1的记录。在子表中有3个被引用的记录,这些记录存储有childID 1、2、3。

现在,一个客户端向我发送一个parentID为1的实体,以便在数据库中更新。在子集合中,只存在子ID为1和2的子实体。现在的任务是通过从数据库中删除id为3的子记录来更新实体(字段中的任何内容都已更改(

谢谢和问候。

我认为它正在级联您想要使用的内容。例如,Cascase.REMOVE将自动删除所有不再引用的子实体。

你可以这样使用它:

@OneToMany(cascade = CascadeType.REMOVE)

在这里可以找到一个很好的概述:https://www.baeldung.com/jpa-cascade-types

最新更新