[英]Does having a custom update query with WHERE clause gives more performance while updating in Spring Data JPA?
假设我有一个名为 Car 的实体。 现在实体的主键不是自动生成的 Id。 假设我需要用一组值更新我的汽车实体。但问题是我需要确保给定的 ID 已经存在于数据库中。 因为我知道在 spring 数据 JPA 中,我们使用save()
方法来保存和更新现有实体。
然后,在为save()
方法插入新主键的情况下,将导致保存,否则它将更新该特定实体。因此,我始终需要确保在更新期间该方法不会为无效 ID 创建新实体。
因此,为了克服这个问题,我看到许多开发人员在更新之前使用find()
方法调用来确保给定的主键已经存在。但是您可以看到会有额外的数据库命中来确保这一点。
因此,为了克服这个问题,我想到了使用自定义更新查询。然后我可以通过在 JPARepository 中将它的返回类型声明为 int 来确定查询是否被执行。 所以根据我的知识查询将 output 1 表示成功,0 表示更新失败。
所以我需要知道的是,在为方法updateCar()
提供不存在的主键的情况下,我是否可以始终确保更新不会因为主键无效而成功。 我的意思是如果更新由于不同的错误而失败会发生什么?
本次讨论的最终目的是避免在更新前检查主键是否存在。 所以如果有更好的方法请state吧。
前任:
@Modifying
@Query("UPDATE Car c SET c.status =:status WHERE c.id =:id")
int updateCar(@Param("status") String status, @Param("id") String id);
您从更新中返回的 int 是更新的行数。
所以我需要知道的是,在为方法 updateCar() 提供不存在的主键的情况下,我是否可以始终确保更新不会因为主键无效而成功。 我的意思是如果更新由于不同的错误而失败会发生什么?
如果由于任何其他原因更新失败,那么您将收到异常。
您的解决方案的问题是您必须为每个用例编写更新语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.