2015-02-10 13 views

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:

  1. 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.
  2. 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

czy możesz mi powiedzieć, jak to wdrożyć? – Awakening

+0

Czego chcesz zaimplementować? Operacja 'save()' jest implementowana przez Spring Data JPA framework. –

+0

Mam na myśli, że operacja "zapisz" tylko aktualizuje, ale nie tworzy – Awakening

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.