spring数据如何jpa repository.save只做更新

时间:2015-02-10 04:59:09

标签: spring-data-jpa

如果找不到主键,spring-data-jpa repository.save如何只update但不创建新的。{ 目前,如果找不到,repository.save()将在我的数据库中创建一条记录

2 个答案:

答案 0 :(得分:21)

Repository.save()插入以及更新

的双重用途

Spring使用两种机制来决定是否必须在实体上使用 Insert Update

  1. 默认情况下,Spring会检查实体的 Id-Property @Id),以确定实体是否为新实体。如果identifier属性为null,则该实体将被视为 new ,否则不会是新的。
  2. 另一种更好地控制这种情况的方法是实施 Persistable。对于实现Persistable的实体,Spring 将调用isNew(…)方法来确定它是否必须已插入已更新

答案 1 :(得分:1)

@ManishMaheshwari意味着Repository.findeOne(Id)。 以下是控制器的示例:

 @RequestMapping(value = "/recipes/{id}/edit", method = RequestMethod.POST)
  public String saveEditedRecipe(@PathVariable("id") Long id){
    Recipe recipe = recipes.findOne(id);

    //do anything you want

    recipes.save(recipe);

    return "redirect:/recipes/" + recipe.getId();
  }

在这种情况下,我们从路径获取现有的Id值并将其传递给.findOne()。这样我们就可以获得正确ID的配方,我们想要更新。然后你可以做额外的逻辑或只是.save()。使用这种方法,它将使用您传入的Id确认更新实体。