有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java与本机查询级联删除

我有一个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;

    ...
}

我想删除一个特定对象的alb和Cs。我知道如果我做了这样的事情,Eben可以处理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级联”

最好的解决方案是什么


共 (1) 个答案

  1. # 1 楼答案

    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>();