我使用的游戏框架2和Ebean。 当用户提交一个表单到数据库编辑现有的对象,它不保存空值。 我想这是为了防止覆盖不与空表单字段。 但我怎么可以让他们在形式空字段集,如果他们需要?
例如,在用户编辑的Event
对象。 Event.date
是13年1月1日。 用户设置Event.date
在空表单字段并提交表单。 检查Event.date
在调试器中显示它的价值是零。 我保存Event
。 如果我看的Event
在数据库中,它的价值仍然是13年1月1日。
编辑:这似乎没有此方法。 唯一的问题是它不能在嵌套实体的工作。 该解决方案的任何?
update(Object bean,Set<String> properties)
创建ebean.properties
文件旁边的application.conf
文件,该行添加到它:
ebean.defaultUpdateNullProperties=true
Null
在Ebean特性被认为是卸载,这样可以防止不应该被清零偶然归零性质,他们只是排除。
因为这个恢复的Date
(和其他字段),以null
在Ebean是...很难:)。 上次当我不得不做同样的事情(恢复Date
),我用第二个查询只是做...归零的Date
( 后 event.update(Object o)
public static Result updateEvent(){
Form<Event> eventForm = form(Event.class).bindFromRequest();
// do some validation if required...
Event event = eventForm.get();
event.update(event.id);
if (eventForm.get().date == null){
Ebean
.createUpdate(Event.class, "UPDATE event SET date=null where id=:id")
.setParameter("id", page.id).execute();
}
}
在另一方面,如果你使用的比较,用于过滤事件(总是大于X选择更新),您只需将日期设置为很“老”的价值,这也应该做的伎俩。 在这种情况下,你会更新一次的对象。
private static final Date VERY_OLD_DATE = new GregorianCalendar(1, 0, 1).getTime();
public static Result updateEvent(){
Form<Event> eventForm = form(Event.class).bindFromRequest();
Event event = eventForm.get();
if (eventForm.get().date == null){
event.date = VERY_OLD_DATE;
}
event.update(event.id);
}
在这种情况下,你的HTML表单,您将需要清除表单字段的值(或者只发送每次都像日期0001-01-01
),但它可以很容易地甚至用JavaScript来完成。