0

私はエンティティ、oneToMany 関係に取り組んできましたが、これを使用するたびに問題が発生します。

//Parent class    

@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER, 
        targetEntity = FeedbackCategory.class, mappedBy = "parent")    
@PrivateOwned
@OrderBy("category ASC")
private List<Child> children;

//... other code here, i.e. getters-setters

@PrePersist
@PreUpdate
void prePersistUpdate() {

  // set the foreign key of child to this.ID
  if(children != null && !children.isEmpty())
  {
      for(Child ch: children)
      {
          ch.setParent(this);       
      }          
  }
}

Parent.class を更新するとき、特にエンティティをクリーンに更新するときに、親の ID が子エンティティと一緒に (外部キーとして) 保持されませんでした。助けてください...

@PreUpdate が機能していないようで、@PrePersist は完全に機能します。

4

1 に答える 1

1

一般に、モデルを正しく維持する方がよいでしょう。

子を追加して親を設定する addChild() メソッドを追加します。そうすれば、モデルは壊れません。

@PreUpdate は、コミット プロセスの後半 (オブジェクトを更新する必要があると判断した後) に発生します。以前の JPA イベントはないと思いますが、EclipseLink PreWrite イベントを使用できます。これには、EntityListener と同じ方法で構成できる DescriptorEventListener を使用する必要があります。

于 2012-04-11T13:42:14.453 に答える