4

私のアプリケーションには、非常に単純な JPA@ManyToMany関係が設定されています。AProductは 1 つ以上OrderSystemの s の一部です。それぞれOrderSystemに多くProductの があります。これは典型的な多対多の関係です。

私が戦っている問題は次のとおりです。からへorderSystems.remove()の参照を削除するために使用すると、エントリが (そのセッション内で) 削除されたように見えます。ただし、エントリはフラッシュ時に相互参照テーブルから削除されず、再ロードすると以前のs のセットが含まれています。ProductOrderSystemProductOrderSystem

次のコードがあります。

@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;
    }
}

ここで欠けているものを誰かに教えてもらえますか?

4

3 に答える 3

2

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

于 2009-03-23T19:22:00.847 に答える
2

問題は、私が双方向の関係をクリアしていないことにあることが判明しました。OrderSystem から製品を削除しますが、製品から OrderSystem を削除しません。

于 2009-03-31T15:45:59.630 に答える
1

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

// Find your 2 beans with entityManager

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

// then persist() and flush()
于 2010-12-16T10:09:16.677 に答える