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 楼答案
com.avaje.ebean.Ebean
类有delete
方法,该方法将集合作为参数:因此,您可以使用以下代码: