1

助けが必要です。私は1対多の関係を持つ2つのクラスを持っています:

@Entity
public class Parent extends Model{

  @Id
  public Long id;

  @OneToMany(fetch = FeatchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
  public List<Child> children;

}

@Entity
public class Child extends Model{

  @Id
  public Long id;

}

したがって、remove()を呼び出すと、子エンティティはDBから削除されません。

Parent parent = Parent.find.byId(id);
parent.children.remove(parent.children.get(0));
parent.save();

そして次に私がfind.byIdを見つけたとき-彼らが決して削除されなかったように、すべての子供たちがそこにいます:(

2.0.4、インメモリデータベースを再生します。

他に情報が必要な場合はお知らせください。

4

1 に答える 1

5

私はこれをもう少しいじって、なぜこれが機能しないのかを理解しました。

結合テーブルのない単方向の関係があるため、関連付けを実際に削除するということは、対応する子レコードを削除することを意味します(または少なくともparent_id列を更新します)。EBeanがこれを行わないのはおそらく良いことです。なぜなら、他のテーブルが子と外部キーの関係にあるかどうかを知らない/チェックしないからです。

できることは、他のテーブルが子とFK関係を持たないこと、そのテーブルが親によって「所有」されていること、および関係から削除されたときにEbeanがエンティティを完全に削除することはOKであることを明示的に示すことです。これは、の属性に@PrivateOwned注釈を追加することによって行われます。childrenParent

この投稿は私に次のことを教えてくれました:https ://groups.google.com/forum/?fromgroups =#!topic / ebean / dXPWpJCQkj8

于 2013-03-21T11:32:24.717 に答える