Playframework play.db.ebean.Model.save()覆盖未在子级上调用

Playframework play.db.ebean.Model.save()覆盖未在子级上调用,playframework,ebean,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

例如:

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 in controller时:

Parent p = new Parent();
Child c = new Child(p);
p.setChild(c);
p.save();
未调用子级中重写的save()。然而,看起来子对象确实保存在数据库中。有线索吗?谢谢

模型上的save()方法不是设计成这样使用的

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

模型上的save()方法不是设计为以这种方式使用的


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

我找到了另一种解决方法

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

Parent p = new Parent();
Child c = new Child(p);
p.setChild(c);
c.save();
将子对象保存到数据库中后,父对象也会更新并保持不变


不过,Ebean文档中没有提到这一点。

我找到了另一种解决方法

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

Parent p = new Parent();
Child c = new Child(p);
p.setChild(c);
c.save();
将子对象保存到数据库中后,父对象也会更新并保持不变

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