所以我有一些实体被用作坐标系的基础,为了本文的目的,我们将其称为A
,B
,C
和D
。每个实体都有多个@OneToMany
关系,我想级联删除。即,当某个A
被删除时,@OneToMany
关系中的每一个中的所有实体也被删除。相当标准的东西。JPA级联单向关系,不加载所有内容
但是,我没有看到让这些实体明确跟踪这些关系的时候,我想要做的就是级联删除。每次将一个新实体添加到@OneToMany
关系中时,我都没有看到将所有这些实体(可能有数百万个!)加载到内存中的意义(即,只有在访问它时才使用延迟加载,但是当新关系中的实体被添加)。
让我们添加一个小例子:
@Entity
public class A {
@Id
private long id;
// ... other fields ...
@OneToMany
private Collection<SomeClass> collection;
}
@Entity
public class SomeClass {
@Id
private long id;
// ... other fields ...
@ManyToOne
A a;
@ManyToOne
B b;
// ... likewise for C, D ...
}
可以有多个类相似SomeClass
等多个@OneToMany
关系,需要黏合A
(和B,C,D
)。这会让FAST变得单调乏味。此外,每次添加SomeClass
的新实例时,我都需要加载整个集合,这看起来非常低效(我最终将整个数据库加载到内存中,以便级联删除!!!) 。
如何在不修改底层数据库的情况下实现我想要的功能(例如在定义中指定ON DELETE CASCADE),JPA的设计人员是否考虑过这种用例?也许我错了,我需要加载整个集合时添加一个实体的关系(如果是这样,请解释为什么:))。
在这里提出了一个类似的问题:JPA: unidirectional many-to-one and cascading delete但它没有一个令人满意的解决方案,它不讨论是否将整个关系加载到内存中。
你有很多解释发布,但是,我没有得到明确的观点。 – CycDemo