如果找不到主键,spring-data-jpa repository.save
如何只update
但不创建新的。{
目前,如果找不到,repository.save()将在我的数据库中创建一条记录
答案 0 :(得分:21)
Repository.save()
是插入以及更新
Spring使用两种机制来决定是否必须在实体上使用 Insert 或 Update :
@Id
),以确定实体是否为新实体。如果identifier属性为null,则该实体将被视为 new ,否则不会是新的。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确认更新实体。