2016-04-07 38 views
0

在使用Grails四年後,我已經在Spring Boot中啓動了一個新項目。 在Grails中,我使用了一個域類的實例的屬性字段來更新數據庫表中的關聯行。 domain.properties的分配通常在服務內部完成。 properties字段是使用來自Web表單的數據設置的。 這種方法允許用一行代替一個域實例,而不是編寫n個代理,其中n是域類中定義的屬性的數量。類似於Spring中的Grails Domain屬性字段?

現在的問題..在春天有類似的東西? 我願做同樣的事情在Spring:

update(Long radioId,Map properties) { 
     // get the radio to be update from the db 
     Radio radio = getRadio(radioId) 
     radio.properties = properties 
     save(radio) 
} 

我想補充一些細節, 我控制器

public ModelAndView updateRadio(Radio radio) { 
     radioService.update(radio); 
     return new ModelAndView("redirect:/superadmin/radio/"+radio.getIdentifier()+"/zoom"); 
    } 

我的服務

@Service 
public class RadioService { 
... 

    public void update(Radio radio) { 
      assert radio.getId() != null; 
      radioRepository.save(radio); 
    } 
... 
} 

現在,如果Web表單不明確地發送無線電中定義的所有字段我有問題,因爲我將失去已存儲字段的值。 如果我可以寫這樣的東西

public void update(Map radioProperties,Long radioId) { 
    Radio radio = radioRepository.findById(radioId); 
    radio.properties = radioProperties // only properties present in this map will be update (in grails) 
    radioRepository.save(radio); 
} 

這將是偉大的。
在後一種方法中,只有地圖中的屬性(ence在web表單中)將被更新,而射頻實例的其他存儲字段將不變。

回答

0

看看Spring Data JPA,它可以通過id加載域對象,將傳入的請求參數綁定到域對象,並且還可以自動爲您添加一些CRUD存儲庫。

+0

嗨,我很喜歡使用Spring Data JPA。我已經更新了我的問題,希望能夠更清楚地闡述更多細節。 Thx –

+0

啊,對不起,我一直在處理這個前端,例如使用隱藏字段或服務器端使用@InitBinder進行更復雜的綁定。也許Spring的BeanUtils可以幫助你 - http://docs.spring.io/spring-framework/docs/current/javadoc-api/index.html?org/springframework/beans/BeanUtils.html –

+0

好的謝謝,我會檢查它..但似乎我必須由我自己來執行。 :-) –

相關問題