1

Category次のように定義された自己リンクエンティティがあるとします。

public class Category {

@Id
@Access(AccessType.FIELD)
public String Url;

@ManyToOne(optional=true)
@Access(AccessType.FIELD)
public Category Parent;

@OneToMany
private Set<Category> subs;
public void addSub(Category sub) {
    subs.add(sub);
}
public void removeSub(Category sub) {
    subs.remove(sub);
}

@Access(AccessType.FIELD)
public String Title;

@Access(AccessType.FIELD)
public boolean Done;

Category新規作成して自分のaddSubメソッドで追加すると正しく動作するのだろうか?Category正しく永続化されますか? サブカテゴリは自動的に正しい順序で保持されますか?

4

1 に答える 1

1

あなたのコードの現在の状態では - いいえ。必要に応じて機能させるには、次のことを行う必要があります。

  1. 双方向の関係の側面をmappedByon@OneToManyで接続します。そうしないと、Hibernate は 2 つの異なる関係があると見なします。

    @OneToMany(mappedBy = "Parent")
    
  2. 関係の両側を一貫した状態に保つのはあなたの責任です。

    public void addSub(Category sub) {
        sub.setParent(this);
        subs.add(sub);  
    }  
    

    Hibernate は@ManyToOne、外部キーを格納するときに横を調べます。

  3. 永続的なサブカテゴリをCategory自動的に永続化する場合は、カスケードを構成する必要があります。

    @OneToMany(..., cascade = CascadeType.ALL)
    
于 2012-09-16T13:09:26.530 に答える