2009-03-23 8 views
4

私のアプリケーションではかなり簡単なJPA @ManyToManyの関係が設定されています。 Productは、1つまたは複数の部分の一部である。各OrderSystemは、多くのProductを持つことができます。典型的な多対多の関係です。私のremove()はJPAを使用しているDBから参照を実際に削除しないのですか?

私はこの問題を抱えています:orderSystems.remove()を使用してProductからOrderSystemへの参照を削除すると、そのセッション内でエントリが削除されたように見えます。ただし、フラッシュ上のクロスリファレンステーブルからエントリが削除されず、Productをリロードすると、以前のOrderSystemが設定されています。

私は、次のコードを持っている:

@Entity 
@Table(name = "p_product_versions") 
@Validation 
public class Product { 
    private List<OrderSystem> orderSystems; 
    @ManyToMany 
    @JoinTable(name = "p_order_systems_has_product_versions", 
      joinColumns = 
       @JoinColumn(name = "p_product_versions_prod_version_id"), 
      inverseJoinColumns = 
       @JoinColumn(name = "p_order_systems_system_id")) 
    public List<OrderSystem> getOrderSystems() { 
     return orderSystems; 
    } 

} 

@Entity 
@Table(name = "p_order_systems") 
@Validation 
public class OrderSystem { 
    private List<Product> products; 
    @ManyToMany (mappedBy = "orderSystems") 
    public List<Product> getProducts() { 
     return products; 
    } 
} 

誰もが、私はここに欠けている何で私を指すことができますか?

答えて

2

問題は、両方向で関係をクリアしていないことがわかったことがわかりました。 OrderSystemから製品を削除しますが、製品からOrderSystemを削除しません。

2

削除の外観はどのようなコードですか?あなたはトランザクションでそれをやっていますか?変更をコミットすることを覚えていますか?

+0

はい - 私は私が間違って何をやっていた考え出した、そしてそれに自分自身の答えを提出します。 –

1

両側から関係を削除する必要があります。 それを行う方法は次のとおりです。両方に

// Find your 2 beans with entityManager 

product.setOrderSystems(null); 
orderSystem.setProducts(null); 

// then persist() and flush() 
+0

これは本当の答えではありません。それを削除し、代わりにコメントとして投稿してください。また、FAQ(http://stackoverflow.com/faq)を読むのに数分かかることをお伺いしたいと思います。 – jweyrich

+0

こんにちはjweyrich!前回の記事をコードソリューションで変更しました。今、この質問には本当に興味があります;-) – Vince

+0

優秀! downvoteを削除しました。 – jweyrich

関連する問題