Spring 中 getOne(long id) 的可行替代方案是什么

What is a viable alternative to getOne(long id) in Spring

我正在 Spring 服务中编写一个 update 方法,它说 getOne() 已被弃用,我已经审查了替代方案并且 findById(long id) 似乎是首选,但我正在努力使它在我的案例中起作用。

我想更新保存在数据库中的对象的 name 字段。然后我想用更新后的名称将它重新保存在数据库中。

我最初使用 getOne()

获得此代码
Society inDb = societyRepo.getOne(id);
inDb.setName(societyUpdate.getName());
societyRepo.save(inDb);

我尝试修改如下,

Optional<Society> soc = societyRepo.findById(id);
soc.ifPresent(society -> society.setName(society.getName()));
societyRepo.save(soc);

但由于 soc 现在是可选的,我无法将其保存回数据库中。

是否可以在 SocietyRepo Society findbyId(long id); 中编写另一个方法,这样我就可以使用 Society s = societyRepo.findById(id); to get the Societyfrom the database, update thename` 字段,然后重新保存在数据库中?

假设这一切都发生在单个事务中,您实际上不需要调用 save

如果它不在单个事务中,或者为了清楚起见,您希望保留对 save 的调用,以下将起作用:

societyRepo.findById(id)
    .ifPresent(society -> {
        society.setName(societyUpdate.getName());
        societyRepo.save(soc);
    });

注意:我将 society.getName 更改为 societyUpdate.getName,假设这是您的错字。