CrudRepository保存功能更新已删除的实体

时间:2018-03-12 21:53:26

标签: spring-boot crud

我正在使用带有Spring JPA和CrudRepository的Spring Boot,我想知道save函数是否有任何方法可以检测已删除的嵌套实体并将其更新为已删除或我是否必须在每个已删除的嵌套项上调用delete函数

假设我有这个:

user: {
    name: 'John Smith',
    profile: {
        experience: [
            {
                job: 'Google',
                role: 'System admin'
            },
            {
                job: 'Apple',
                role: 'Platform manager'
            }
        ]
    }
}

现在,在我的代码中,现在如果我更改名称并添加经验然后点击保存按钮,CrudRepository的保存功能只需保存用户对象即可解决这个问题,因为我的所有项目都与注释@相关联oneToOne,@ oneToMany和@manyToOne。

我的问题是,如果我更改名称,添加体验并删除其他体验怎么办? CrudRepository中的save函数不考虑在DTO转换为JPA时来自前端的对象中删除的实体。

我希望我的用户能够根据需要编辑他们的个人资料页面,这意味着:更改状态,添加项目或删除项目。然后点击保存按钮,用户对象将保存为新编辑的用户对象。

我希望这是有道理的。

由于

1 个答案:

答案 0 :(得分:0)

您应该创建一个单独的restful端点来管理体验条目:

  • POST /users/1/experiences - 创建新体验条目
  • DELETE /users/1/experiences/1 - 从用户
  • 中删除体验条目
  • PUT/PATCH/POST(whatever you want) /users/1/experiences/1 - 更新体验条目

您可以像这样管理它,或者如果您希望每次保存用户时都坚持使用您拥有的内容,您应该从数据库中删除所有体验条目并替换为DTO中的新数据。会让你的生活更轻松。