【问题标题】:Something similar to Grails Domain properties field in Spring?类似于 Spring 中的 Grails 域属性字段?
【发布时间】: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


    【解决方案1】:

    看看Spring Data JPA,它可以通过 id 加载域对象,将传入的请求参数绑定到域对象,还可以自动化一些 CRUD 存储库。

    【讨论】:

    • 嗨,我已经在使用 Spring Data JPA。我已经用更多细节更新了我的问题,希望更清楚。谢谢
    • 啊,对不起,我一直在处理这个前端,例如通过使用 @InitBinder 使用隐藏字段或服务器端进行更复杂的绑定。也许 Spring 的 BeanUtils 可以帮助你 - docs.spring.io/spring-framework/docs/current/javadoc-api/…
    • 好的,谢谢,我会检查它.. 但似乎我必须自己实现。 :-)
    猜你喜欢
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2012-06-03
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    相关资源
    最近更新 更多