【发布时间】:2021-08-10 11:00:18
【问题描述】:
假设我有一个名为 Car 的实体。现在实体的主键不是自动生成的 Id。假设我需要用一组值更新我的汽车实体。但问题是我需要确保给定的 ID 已经存在于数据库中。因为我知道在 Spring Data JPA 中我们使用 save() 方法来保存和更新现有实体。
然后在为save() 方法插入新主键的情况下将导致保存,否则它将更新该特定实体。所以我总是需要确保在更新期间该方法不会为无效的 ID。
因此,为了克服这个问题,我看到许多开发人员在更新之前使用find() 方法调用来确保给定的主键已经存在。但是您可以看到将有一个额外的数据库命中来确保这一点。
所以为了克服这个问题,我想到了使用自定义更新查询。然后我可以通过在 JPARepository 中将它的返回类型声明为 int 来确定查询是否被执行。所以根据我的知识查询将输出 1 表示成功,0 表示更新失败。
所以我需要知道的是,在为方法updateCar() 提供不存在的主键的情况下,我是否可以始终确保更新不会因为主键无效而成功。我的意思是如果更新由于其他错误而失败会发生什么?
本次讨论的最终目的是避免在更新前检查主键是否存在。所以如果有更好的方法请说明。
例如:
@Modifying
@Query("UPDATE Car c SET c.status =:status WHERE c.id =:id")
int updateCar(@Param("status") String status, @Param("id") String id);
【问题讨论】:
标签: java spring-boot hibernate jpa spring-data-jpa