繁体   English   中英

在 Spring 数据 JPA 中更新时,具有 WHERE 子句的自定义更新查询是否会提供更高的性能?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM