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 更新不保存更改的字段项的主要内容,如果未能解决你的问题,请参考以下文章