2015-02-10 90 views

回答

12

Repository.save()插入以及更新的雙重方法,望目

有通過使用兩種機制春天,以決定是否要對實體使用插入更新

  1. 默認情況下,春天檢查實體的Id-屬性@Id),以確定該實體是否是新的。如果標識符屬性爲空,則該實體被視爲,否則不是新的。
  2. 另一種更好地控制這種情況的方法是實施 Persistable。對於執行Persistable的實體,彈簧 將調用isNew(…)方法來判斷它是否必須是插入已更新
+1

你能告訴我如何實現它嗎? – Awakening 2015-03-06 08:44:16

+0

你打算實施什麼? 'save()'操作由Spring Data JPA框架實現。 – 2015-03-07 09:53:15

+0

我的意思是讓'保存'操作只做更新,但不創建 – Awakening 2015-03-08 00:54:02

1

@ManishMaheshwari表示Repository.findeOne(Id)。 這裏是控制器的一個示例:我這種情況下,我們正在從路徑現有Id值並使其在.findOne()

@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的配方。然後你可以做額外的邏輯或只是.save()。使用這種方法,它會用你傳入的Id更新實體。