Comment spring-data-jpa repository.save
ne fait que update
mais PAS en créer une nouvelle si la clé primaire n'est pas trouvée.
Actuellement, repository.save () créera un enregistrement now dans ma base de données s'il n'est pas trouvé
Repository.save()
est une méthode à double objectif pour Insérer ainsi que Mettre à jour
Il existe deux mécanismes utilisés par Spring pour décider s'il doit utiliser Insérer ou Mettre à jour sur une entité:
@Id
) De l'entité, pour déterminer si l'entité est nouvelle ou non. Si la propriété identifiant est nulle, l'entité est traitée comme nouvea, sinon pas nouveau.Persistable
. Pour les entités qui implémentent Persistable
, Spring appellera la méthode isNew(…)
pour déterminer si elle doit être insérée ou Mis à jour .@ManishMaheshwari signifiait Repository.findeOne (Id). Voici un exemple de contrôleur:
@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();
}
Dans ce cas, nous obtenons la valeur Id existante du chemin et la transmettons dans le .findOne (). De cette façon, nous obtenons la recette avec l'ID correct que nous voulons mettre à jour. Ensuite, vous pouvez faire une logique supplémentaire ou simplement .save (). En utilisant cette approche, il mettra à jour l'entité avec l'ID que vous avez transmis à coup sûr.