2013-01-11 82 views
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; 

    ... 
} 

我想刪除特定的目的的人B和C。我知道Ebean可以照顧刪除銫,如果我做這樣的事情:

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」。

什麼是最好的解決方案?

回答

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