JPA2 - 如何在“多”方面自动删除一对多对一映射数据?

时间:2012-10-01 21:44:25

标签: java spring jpa ejb

第一个CascadeType.Remove不是一个选项,因为客户端数据库可能不支持级联操作。

我猜OrphanRemoval = true只处理@OneToXXX关系。

many-to-one关系怎么样?

例如many-to-one这样的映射:

public class Order{
    ....
    @ManyToOne
    private Customer customer;
    .....
}

在Customer实体中,没有映射到Order,这使得关系变为单向。

那我们怎么能remove all orders from a customer before removing that customer?是否有一种简单的自动方式来处理它,或者我们必须通过服务层显式实现代码并调用findOrdersByCustomer(long customer_id)之类的内容然后删除它们?

提前致谢。

1 个答案:

答案 0 :(得分:2)

是的,您需要找到所有订单并将其删除。或者您也可以执行删除所有内容的JPQL查询:

delete from Order o where o.customer = :customer

请注意,您关于CascadeType.REMOVE的注释是错误的:它是执行级联的JPA,而不是数据库。因此无论数据库是什么都支持它。