Java JPA2——如何自动删除“多”侧的一个方向多对一映射数据?
第一个CascadeType.Remove不是选项,因为客户端数据库可能不支持级联操作 我猜orphaneremovation=true只处理@OneToXXX关系 多对一关系如何 例如,Java JPA2——如何自动删除“多”侧的一个方向多对一映射数据?,java,spring,jpa,ejb,Java,Spring,Jpa,Ejb,第一个CascadeType.Remove不是选项,因为客户端数据库可能不支持级联操作 我猜orphaneremovation=true只处理@OneToXXX关系 多对一关系如何 例如,多对一映射如下: public class Order{ .... @ManyToOne private Customer customer; ..... } 在客户实体中,不存在使关系成为一个方向的订单映射 那么,在删除某个客户之前,我们如何删除该客户的所有订单?有没有一种简
多对一
映射如下:
public class Order{
....
@ManyToOne
private Customer customer;
.....
}
在客户实体中,不存在使关系成为一个方向的订单映射
那么,在删除某个客户之前,我们如何删除该客户的所有订单
?有没有一种简单的自动处理方法,或者我们必须通过服务层显式地实现代码,并调用类似于findOrdersByCustomer(long customer_id)
的东西,然后删除它们
提前谢谢。是的,您需要找到所有订单并删除它们。也可以执行JPQL查询,删除所有内容:
delete from Order o where o.customer = :customer
请注意,您关于CascadeType.REMOVE的说明是错误的:执行级联的是JPA,而不是数据库。因此,无论数据库是什么,都支持它 您应该能够使用
@OneToMany(cascade=CascadeType.REMOVE)
。据我所知,JPA级联不使用数据库的级联。不过,您需要在客户身上定义关系才能做到这一点。谢谢。我听说一些数据库提供者不支持级联操作。因此,在这种情况下,您认为是否可以应用CascadeType.Remove
来处理该作业,然后避免大量代码更改,并且它与所有数据库平台兼容,而不考虑供应商?我们确实更喜欢JPA的某种自动化,这没关系,但是注释必须在关联的另一端,这意味着它必须成为双向关联。