Null
Ebean 中的属性被视为已卸载,因此为防止意外将不应为空的属性置空,将它们排除在外。
因为这个在 Ebean 中的恢复Date
(和其他领域)null
是......很难:)。上次当我不得不做同样的事情(revert 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 也可以轻松完成。