play.db.ebean.Model.save()覆盖未在child上调用

时间:2015-11-15 18:12:49

标签: playframework ebean

示例:

public class Child extends Model {
    @Id
    public Long childId;

    @OneToOne
    public Parent parent;

    public Child(Parent p) {
        parent = p;       
    }

    @Override
    public void save() {
        Logger.debug("saving child");
        super.save();
    }
}

public class Parent extends Model {
    @Id
    public Long parentId;

    @OneToOne(mappedBy = "parent", cascade = CascadeType.ALL)
    public Child child;

    void setChild(Child c) { child = c; }
}

当我在控制器中调用save时:

Parent p = new Parent();
Child c = new Child(p);
p.setChild(c);
p.save();

未调用子级中被覆盖的save()。但是,看起来子对象确实保存在数据库中。任何线索?谢谢!

2 个答案:

答案 0 :(得分:0)

Model上的save()方法不是以这种方式使用的。

相反,您可以使用标准JPA @PrePersist / @PreUpdate注释或Ebean的BeanPersistController(当您需要更多控制,访问事务,加载属性,更新属性等)时。

答案 1 :(得分:0)

我找到了解决这个问题的另一种方法。

似乎如果我在子模型中进行保存,父母也会相应地更新:

Parent p = new Parent();
Child c = new Child(p);
p.setChild(c);
c.save();

将子对象保存到db后,父对象也会更新并保持持久性。

但是在Ebean文档中没有提到这一点。