Jak tylko robić tylko update
, ale NIE tworzyć nowe, jeśli klucz podstawowy nie zostanie znaleziony.
Obecnie repository.save() utworzy teraz nagrywać w mojej bazy danych, jeśli nie znalezionow jaki sposób repozytorium danych źródłowych spring rescue tylko aktualizować
5
A
Odpowiedz
12
Repository.save()
jest podwójna metoda przeznaczona dla Insert jak również Aktualizacji
Istnieją dwa mechanizmy wykorzystywane przez wiosna zdecydować, czy należy go używać Insert lub Aktualizacja na jednostki:
- domyślnie wiosnę sprawdza obiekt, aby ustalić, czy obiekt jest nowy, czy nie. Jeśli właściwość identyfikatora ma wartość NULL, wówczas jednostka jest traktowana jako nowa, w przeciwnym razie nie jest nowa.
- Innym sposobem uzyskania lepszej kontroli nad tym problemem jest wdrożenie
Persistable
. W przypadku podmiotów, które implementująPersistable
, Spring wywoła metodęisNew(…)
, aby ustalić, czy musi to być Wstawiona lub Zaktualizowana.
1
@ManishMaheshwari oznaczała Repository.findeOne (Id). Oto przykład z kontrolerem:
@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();
}
I w tym przypadku jesteśmy coraz istniejącą wartość ID z drogi i przekazania go w .findOne(). W ten sposób otrzymujemy przepis z poprawnym identyfikatorem, który chcemy zaktualizować. Następnie możesz zrobić dodatkową logikę lub po prostu .save(). Korzystając z tego podejścia, zaktualizuje on jednostkę z identyfikatorem, który przekazałeś na pewno.
czy możesz mi powiedzieć, jak to wdrożyć? – Awakening
Czego chcesz zaimplementować? Operacja 'save()' jest implementowana przez Spring Data JPA framework. –
Mam na myśli, że operacja "zapisz" tylko aktualizuje, ale nie tworzy – Awakening