2

我有一个 Ebean 实体模型,其中包含 3 个与 @OneToMany 关系相关的实体,如下所示:

public class A extends Model {
    @Id
    @GeneratedValue
    public Long id;

    public String name;

    @OneToMany(cascade = CascadeType.ALL)
    public List<B> bList;
    ...
}

public class B extends Model {
    @Id
    @GeneratedValue
    public Long id;

    public String name;

    @OneToMany(cascade = CascadeType.ALL)
    public List<C> cList;
    ...
}

public class C extends Model {
    @Id
    @GeneratedValue
    public Long id;

    public String name;

    ...
}

我想删除特定 A 对象的 al Bs 和 Cs。我知道如果我做这样的事情,Ebean 可以处理 Cs 的删除:

for (B b : a.bList) {
    b.delete();
}

但我认为这不是最好的解决方案。我想做这样的事情:

String sql = "DELETE FROM B WHERE B.a_id="+a.id;
SqlUpdate update = Ebean.createSqlUpdate(sql);
update.execute();

但它是一个原生 SQL,它输出一个“ConstraintViolationException”,因为它没有一个“ON DELETE CASCADE”。

最好的解决方案是什么?

4

1 回答 1

0

com.avaje.ebean.Ebean类具有delete以集合为参数的方法:

static int delete(Collection<?> c) // Delete all the beans from a Collection.

因此,您可以使用以下代码:

Ebean.delete(a.bList);
a.bList = new ArrayList<B>();
于 2015-01-12T22:41:39.113 回答