2

次のような @OneToMany 関係に関連する 3 つのエンティティを持つ Ebean エンティティ モデルがあります。

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 オブジェクトのすべての B と C を削除したいと考えています。次のようにすれば、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 であり、「ON DELETE CASCADE」がないため、「ConstraintViolationException」を出力します。

最善の解決策は何ですか?

4

1 に答える 1