2016-04-28 20 views
1

私のエンティティ内にcascade deleteがあります。しかし、私は私の子供の1つの列への参照を持っているという事実によって停止されていると思う。entity。私はもともと、次のフィールドを持っていた私の子供犬のエンティティでHibernate:子の1つの列への2つの参照を持つ親エンティティと子エンティティのマッピング?

@Column(name = "KENNEL_ID", insertable = false, updatable = false) 
    private String kennelId;  

私は親に関連するすべての子エンティティのリストを取得したかったので、私は、これを追加しました:

@ManyToOne 
    @JoinColumn(name = "KENNEL_ID") 
    private Kennel kennel; 

私の親ケンネルのエンティティでは、私は子供の欄にこの項目を追加しました。2番目の子参照と親参照を追加する前に、すべてのエンティティに対してカスケード削除が機能しました。しかし、私はそれらを追加して以来、それはしません。

どうすればこの問題を解決できますか?

答えて

3

親クラスと子クラスを同じクラスにマッピングすることは問題ではありません。問題は、双方向関係の両端を手作業で維持する必要があることです。

child.setParent(parent) 
parent.addChild(child) 

ところで:片側のみ(データベース内の関係を格納する責任がある1)、ストアでそれを設定し、エンティティがあまりにもいくつかのケースで動作しますリロードしてください。 (そして、あなたは多くの古いチュートリアルでこの汚れたトリックを見つけるでしょう)。しかし、私の意見では、それは悪い習慣です。 (テストケースでは、子を保存した後で親をリロードする前にキャッシュを消去する必要があります)。

public void setDogList(List<Dog> dogList) { 
     this.dogList.clear(); 
     this.dogList.addAll(dogList); 
    } 
関連する問題