我的应用程序中设置了一个非常简单的JPA @ManyToMany
关系。 Product
是一个或多个OrderSystem
的一部分。每个OrderSystem
都可以包含多个Product
个。这是典型的多对多关系。
我正在解决的问题是:如果我使用orderSystems.remove()
删除Product
到OrderSystem
的引用,则该条目似乎已被删除(在该会话中) )。但是,在刷新时不会从交叉引用表中删除该条目,当我重新加载Product
时,它具有前一组OrderSystem
s。
我有以下代码:
@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;
}
}
有人能指出我在这里缺少的东西吗?
答案 0 :(得分:2)
您执行删除操作的代码是什么样的?你是在交易中做的,还记得提交更改吗?
答案 1 :(得分:2)
原来问题是我没有在两个方向清除关系。我会从OrderSystem中删除一个产品,但不会从产品中删除OrderSystem。
答案 2 :(得分:1)
您需要从双方中删除关系。 做到这一点的方法是:
// Find your 2 beans with entityManager
product.setOrderSystems(null);
orderSystem.setProducts(null);
// then persist() and flush()