Java 如果在何处获得空结果,则引发更新查询的异常

Java 如果在何处获得空结果,则引发更新查询的异常,java,spring-data,hql,Java,Spring Data,Hql,在控制器层中,我得到了两个参数id,分别是Strategy实体和newstatus,用于更新 @PostMapping("/{id}/status/update") public ResponseEntity<Long> updateStatus(@PathVariable(name = "id") Long id, @NotNull @RequestBody Map<String, String

在控制器层中,我得到了两个参数
id
,分别是
Strategy
实体和new
status
,用于更新

@PostMapping("/{id}/status/update")
public ResponseEntity<Long> updateStatus(@PathVariable(name = "id") Long id,
                                         @NotNull @RequestBody Map<String, String> status) {
显然,解决方案是使用
JpaRepository
findById(ID)
,但这会增加对数据库的查询。作为中期解决方案,我可以使用一个事务处理两个查询,如下所示:

战略服务中

@Transactional
public void update(@NotNull Long id, @NotNull String status) {
    strategyRepository.findById(id).orElseThrow();
    updateStatusById(id, status);
}
这是一个单一的事务,但仍然有几个查询。保持此查询的高速非常重要,因为它的调用非常频繁。如何直接从
updateStatusById
抛出
Exception
,而无需添加查询?可能以某种方式修改HQL查询或使用本机SQL或添加
default
实现?

而不是

void updateStatusById(@NotNull Long id, @NotNull String status);
可以将该方法定义为

int updateStatusById(@NotNull Long id, @NotNull String status);
在这种情况下,返回的值是数据库中更新的实体/行数。这是一个集成在Spring中的组件


现在,在执行查询(
int updated=updateStatusById(id,status);
)之后,可以检查更新了多少个实体。如果更新了
0
元素,则可以抛出
异常。

(1)
update
POST
/
PUT
是冗余的。(2) 调用方可以方便地使用更新的值使此方法返回
ResponseEntity
。(3) 通过使用
@PathVariable(“id”)策略简化控制器;Spring数据将自动解析。您使用的是什么数据库?@Deadpoolpostrges@chrylis-罢工-是的,但这不是魔术,而是质疑。
int updateStatusById(@NotNull Long id, @NotNull String status);