【发布时间】:2016-04-07 07:44:42
【问题描述】:
在使用 Grails 4 年后,我在 Spring Boot 中开始了一个新项目。
在 Grails 中,我使用域类实例的属性字段来更新 db 表中的关联行。 domain.properties 的分配通常在服务内部完成。
properties 字段使用来自 Web 表单的数据进行设置。
这种方法允许使用单行更新域实例,而不是编写 n 赋值,其中 n 是域类中定义的属性的数量。
现在的问题.. Spring 中有类似的东西吗? 我想在 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 表单没有明确发送 Radio 中定义的所有字段,我会遇到问题,因为我将丢失已存储的字段的值。 如果我能写出这样的东西
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)会被更新,而无线电实例的其他存储字段将保持不变。
【问题讨论】:
标签: spring grails properties bind