Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA2——如何自动删除“多”侧的一个方向多对一映射数据?_Java_Spring_Jpa_Ejb - Fatal编程技术网

Java JPA2——如何自动删除“多”侧的一个方向多对一映射数据?

Java JPA2——如何自动删除“多”侧的一个方向多对一映射数据?,java,spring,jpa,ejb,Java,Spring,Jpa,Ejb,第一个CascadeType.Remove不是选项,因为客户端数据库可能不支持级联操作 我猜orphaneremovation=true只处理@OneToXXX关系 多对一关系如何 例如,多对一映射如下: public class Order{ .... @ManyToOne private Customer customer; ..... } 在客户实体中,不存在使关系成为一个方向的订单映射 那么,在删除某个客户之前,我们如何删除该客户的所有订单?有没有一种简

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

我猜orphaneremovation=true只处理@OneToXXX关系

多对一关系如何

例如,
多对一
映射如下:

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的某种自动化,这没关系,但是注释必须在关联的另一端,这意味着它必须成为双向关联。