4

@ManyToMany在我的应用程序中设置了一个非常简单的 JPA 关系。AProduct是一个或多个OrderSystems的一部分。每个OrderSystem可以有很多Products。这是典型的多对多关系。

我要解决的问题是:如果我使用orderSystems.remove()从 a 中删除Product对 an的引用OrderSystem,则该条目似乎已被删除(在该会话中)。但是,刷新时不会从交叉引用表中删除该条目,并且当我重新加载它时,Product它具有前一组OrderSystems。

我有以下代码:

@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 回答