2016-02-18 31 views
0

堆棧搜索,但沒有找到答案。我有幾個文本框的子頁面,當我編輯的數據字​​段插件發送回覆到我的控制器:X-editable插件和Spring MVC - 更新實體的最佳方式

@RequestMapping(value = "/myAcc", method = RequestMethod.POST) 
    public String getValues(@ModelAttribute XEditableForm form){ 
     userService.update(form.getPk(), form.getValue()); 
     return "myAcc"; 
    } 

其中userService使用戶更新的數據庫

@Transactional 
public void update(long id, String firstName){ 
    User user= userRepository.findOne(id); 
    user.setFirstName(firstName); 
    userRepository.save(user); 
} 

的問題是,每次在這種方法中,我會檢查xeditable插件返回的內容,並更新特定的用戶字段,例如姓氏等。在我看來,這不是最好的解決方案。

XEditableForm回報:

pk - primary key of record to be updated (ID in db) 
name - name of field to be updated (column in db) 
value - new value 

問題要問你。我怎樣才能做得更好?

+0

這取決於。如果它只是一個提交按鈕,那沒有任何開銷。如果您希望每次按鍵都立即反映數據庫的表單更改,我建議僅在自上次按鍵後幾秒鐘後發送請求,或者查找某個事件,告知您已完成併發送數據。如果不需要在數據庫中保存立即更改,則可以更新模型屬性/分離實體/ smth else,並在稍後保留或合併它。 –

+0

我認爲我的解釋不完整。這個想法是用戶可以改變幾個字段的值。每次更改後,用戶對象都會在數據庫中更新。所以現在我不得不寫一些方法來檢測每個領域的變化。如果用戶只更改姓氏,我必須檢查其他字段並只更新非空字段。 我問是否有任何方法通過創建一個對象來概括這個例子,然後更新它。你在這裏提到關於合併。您可以展示它在JPARepository接口中的外觀示例嗎? – Adamo

回答

0

我會爲自己回答。在這種情況下,我們可以使用

org.springframework.utilClass ReflectionUtils 

〔實施例使用的:

User user = userRepository.findOne(id); 
Field name = ReflectionUtils.findField(User.class, "name"); 
ReflectionUtils.makeAccessible(true); 
name.set(user, "Admin"); 

通過這種方式,你可以編輯類中的字段知道他們的名字。這就是我的意思。

+0

@georgy gobozov你可以看看嗎? – Adamo