EBeans 更新不保存更改的字段项

Posted

技术标签:

【中文标题】EBeans 更新不保存更改的字段项【英文标题】:EBeans update does not save changed field items 【发布时间】:2020-04-17 22:42:39 【问题描述】:

我从 Play 2.5 升级到 2.7,但在保存表单时遇到问题。 当字段发生更改并且我调用 Model.update() 时,更改不会保留在数据库中(即使在更新完成之前调试时它们显示已更改)

但是,当我专门设置它们时,它们确实会持续存在。所以它必须做一些事情,因为它没有检测到变化并且没有看到对象发生了变化。我在模型中使用getter和setter,所有的属性都是私有的。

这是控制器功能(用两行来持久化这两个字段)

@Check(UserTask.MANAGER)
public Result updateSceneSet(Http.Request request) 
    Messages messages = messagesApi.preferred(request);
    Form<StreamingSceneSet> form = formFactory.form(StreamingSceneSet.class).bindFromRequest(request);
    if (form.hasErrors()) 
        if (form.rawData().get("id") != null && form.rawData().get("id").length() > 0) 
            long itemId = Long.parseLong(form.rawData().get("id"));
            StreamingSceneSet item = StreamingSceneSet.findById(itemId);
            return badRequest(views.html.streaming.editSceneSetView.render(form, item, messages, request));
         else 
            return badRequest(views.html.streaming.createSceneSetView.render(form,messages, request));
        
    

    // Form is OK, has no errors we can proceed
    StreamingSceneSet item = form.get();

    item.setName(item.getName());
    item.setDescription(item.getDescription());

    // Insert or update?
    if (item.getId() == null) 
        item.insert();
        flash("success", messages().at("addedSceneSet", item.getName()));
     else 
        item.update();
        flash("success", messages().at("updatedSceneSet", item.getName()));
    
    return redirect(routes.Streaming.sceneSets());

【问题讨论】:

【参考方案1】:

似乎是因为当我开始升级时,我有一些遗留类,我没有 getter 和 setter,因为我遇到了一些问题,所以我输入了:

play.forms.binding.directFieldAccess = true

删除它使一切恢复正常。

【讨论】:

以上是关于EBeans 更新不保存更改的字段项的主要内容,如果未能解决你的问题,请参考以下文章

Access 2010 VBA 不保存对字段的更改

如何仅更新/保存更改的字段

project 工时界面为啥全为零,摘要分组项完成百分比不能更改。我已经保存比较基准。

EF-实体更新

事务性保存而不调用更新方法

使用 findOne 更新 mongoDB 文档中的子字段并保存