首页 > 解决方案 > 使用 CrudRepository 更新休眠实体

问题描述

我目前正在编写我的第一个 Spring Boot Kotlin 应用程序,并试图创建一个具有 JPA 持久性的 rest API。基础进展顺利,但我正在努力更新补丁端点(@patchMapping)上的模型。

我想遵守适当的休息标准,因此我使用@PatchMapping("/company/{id}").

我希望能够以这样的方式调用 CrudRepository。

  @PatchMapping("/company/{id}")
  fun update(@PathVariable id: Long, @RequestBody updateRequest: Company) : Company {
    return repository.update(updateRequest, id)
  }

但似乎春天的做法是在 requestBody 中传递您要更新的对象的 id?例如

repository.save(updateRequest)

然后自动合并对象。但这与任何理智的休息惯例相冲突......

是否有可用于我想要实现的集成解决方案?我想避免编写我自己的逻辑,因为我希望春天有这个功能。

标签: springspring-bootkotlin

解决方案


你需要这样的东西吗?

 @RestController
 class Controller(private val service: CompanyService) {
   @PatchMapping("/company/{id}")
   fun update(@PathVariable id: Long, @RequestBody company: Company): Company {
     return service.updateCompany(company, id)
   }
 }

 @Service
 class CompanyService (private val repository: CompanyRepository) {
   @Transactional
   fun updateCompany(company: Company, id: Long): Company {
     val companyToUpdate = repository.findOne(id)
     companyToUpdate.setSomething(company.getSomething)
     raturn companyToUpdate;
   }
 }

 interface CompanyRepository : CrudRepository<Company, Long>

推荐阅读