当前位置: 首页 > 知识库问答 >
问题:

在Spring Data JPA中进行更新时,带有WHERE子句的自定义更新查询是否提供了更高的性能?

徐卓
2023-03-14

那么在为save()方法插入新的主键的情况下,将导致保存,否则将更新该特定实体。因此,在更新期间,我始终需要确保该方法不会为无效ID创建新实体。

因此,为了克服这个问题,我看到许多开发人员在更新之前使用find()方法调用,以确保给定的主键已经存在。

因此,为了克服这个问题,我想到了一个自定义的更新查询,然后我可以通过在JPararePository中将查询的返回类型声明为int来确定是否执行了该查询。因此,根据我的知识,查询将输出1表示成功,输出0表示更新失败。

这个讨论的最终目的是避免在更新之前检查主键是否存在。因此,如果有更好的方法,请说明。

例:

    @Modifying
    @Query("UPDATE Car c SET c.status =:status WHERE c.id =:id")
    int updateCar(@Param("status") String status, @Param("id") String id);

共有1个答案

益智明
2023-03-14

从更新中返回的int是更新的行数。

所以我需要知道的是,在为updateCar()方法提供不存在的主键的情况下,我能否始终确保更新不会因为该无效的主键而成功。我的意思是,如果更新由于一个不同的错误而失败,会发生什么?

如果更新由于任何其他原因而失败,那么您将得到一个异常。

 类似资料:
  • 问题内容: 我要实现以下目标: 表的当前状态(my_table) (my_table2)的查询结果 表的预期状态(my_table) 可以在一个更新查询中完成吗?我正在RHEL 5.0上寻找Sybase ASE 12.5 编辑: 我找不到Sybase的解决方案,但该问题的当前答案适用于MS SQL Server。 问题答案: 更新 在MS SQL Server中,您将执行此操作。OP指出这在Syb

  • 问题内容: 这对我来说是一个常见的SQL查询: 有什么办法可以避免拥有两个几乎相同的子查询?该查询是一个明显的简化,但是性能会受到影响,并且查询的内容不必要地凌乱。 问题答案: 不幸的是,Informix不支持UPDATE语句中的FROM子句。解决方法,您将获得更好的结果(性能),方法是将UPDATE更改为MERGE语句。 仅当您的数据库为11.50或更高版本时,此方法才有效 查看IBM Info

  • 本文向大家介绍使用MySQL WHERE子句中的多个值进行更新,包括了使用MySQL WHERE子句中的多个值进行更新的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是使用WHERE子句中的多个值更新的查询- 让我们再次检查表记录- 这将产生以下输出-

  • 问题内容: 我正在尝试用另一列分组的该列的最大值更新表中的一列。 例如,假设我们有一个名为transactions的表,其中有两列:和。无论出于何种原因,我们都希望将其设置为等于每个值的最大值。 我很沮丧并且不擅长在SQL中执行这样的操作,但是到目前为止,这是我所拥有的: 问题答案: 除了@Gordon已经指出的语法错误之外,通常最好 排除空更新 : 无需更改任何内容就无需编写新的行版本(几乎需要

  • 我已经扩展了TreeCell和TreeItem类。MyTreeItem包含一个自定义属性,我在MyTreeCell中使用它来渲染图形/字体等。问题是当我设置MyTreeCell.custom属性我不知道如何使TreeView/单元格重绘。 例如: 任何关于解决方案或(缺乏)设计方法的意见都受到赞赏。

  • 我需要根据一个子查询的结果更新一个表,该子查询带来了1个以上的值,但在下面的查询中,我得到错误返回“subquery returns mouth 1 row”。我想知道是否有可能做一个“循环”,以更新值与我下面的子查询中呈现的每个结果。 完成查询 返回2个或更多值的子查询。 结果 在理想的场景中,我的查询将执行第一个值,在第二个之后...第三个之后...而不重复前面的值。