我怎么知道玩框架2和Ebean保存空字段?(How do I tell Play Framework

2019-08-16 20:45发布

我使用的游戏框架2和Ebean。 当用户提交一个表单到数据库编辑现有的对象,它不保存空值。 我想这是为了防止覆盖不与空表单字段。 但我怎么可以让他们在形式空字段集,如果他们需要?

例如,在用户编辑的Event对象。 Event.date是13年1月1日。 用户设置Event.date在空表单字段并提交表单。 检查Event.date在调试器中显示它的价值是零。 我保存Event 。 如果我看的Event在数据库中,它的价值仍然是13年1月1日。

编辑:这似乎没有此方法。 唯一的问题是它不能在嵌套实体的工作。 该解决方案的任何?

update(Object bean,Set<String> properties)

Answer 1:

创建ebean.properties文件旁边的application.conf文件,该行添加到它:

ebean.defaultUpdateNullProperties=true


Answer 2:

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来完成。



文章来源: How do I tell Play Framework 2 and Ebean to save null fields?