2017-05-22 9 views
0

私は奇妙な問題があります。子から参照されるエンティティコレクション(リレーションの所有側ではない)をエンティティプロパティに割り当ててオブジェクトを削除すると、このコレクションのゲッタを再度呼び出すと、ゲッタを呼び出すとそのエンティティが削除されたことがわかりますgetKomponenten()JPA:コピーされたリストを操作すると、ParentCollectionも変更されます

 // This is an excerpt of my Entity Paket 
     @OneToMany(mappedBy = "paket", cascade = CascadeType.ALL, targetEntity = Komponente.class, fetch = FetchType.EAGER) 
      private List<Komponente> komponenten; 

      public void setKomponenten(List<Komponente> komponenten) { 
       this.komponenten = komponenten; 
      } 

      public List<Komponente> getKomponenten() { 
       return komponenten; 
      } 

     // Komponente (the owning side) 
     @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.EAGER) 
      private Paket paket; 

     // Excerpt from the ManagedBean 
     @ManagedBean 
     @ViewScoped 
     public class PaketController implements Serializable { 
     private List<Komponente> komponenteInSelectedPaketList; 
     private Komponente selectedKomponente; 
     private Paket selectedPaket; 

     public void removeKomponenteFromPaket() { 
       this.komponenteInSelectedPaketList.remove(this.selectedKomponente); 
    // Next row manipulates the referenced entity collectin as well 
       List<Komponente> example = this.selectedPaket.getKomponenten(); 
       // example contains the list without the removed Komponente from the other list (call by reference like behaviour) 
      } 
    } 

ヒント?事前にありがとうございます...

答えて

1

これは参考としての呼び出しではありません。参照渡しの呼び出しは、メソッド引数の変更が呼び出し元から見えることを意味します。メソッド引数にポインタが変更されていません。そのポインタは変更されていません。それは全体を通して同じオブジェクトを指し示します。あなたが見ているのは、ポインタを介してオブジェクトにの変更が表示されていることです。ポインタではこれが起こります。

値による呼び出しと参照による呼び出しの小さなリサーチは、わかりやすくするのに役立ちます。一方、Javaのすべてのメソッド引数は値渡しであることを覚えておいてください。

+0

私は知っています。しかし、コピーされたリストからエンティティインスタンスを削除すると、リストから削除されます。getter getKomponenten() – MrCodex

+0

を呼び出すと、同じリストを指すポインタが返されます。 –

+0

そんなに愚かなこと...ええ、ありがとう... – MrCodex

関連する問題