因此,我有一些实体被用作坐标系的基础,在本文中,我们将它们称为a
、B
、C
和D
。这些实体中的每一个都有多个@OneTomany
关系,我希望级联删除。即,当某些A
被删除时,每个@OneTomany
关系中的所有实体也被删除。相当标准的东西。
然而,当我想做的只是级联删除时,我不认为让这些实体显式跟踪这些关系有什么意义。我看不出加载所有这些实体有什么意义(可能是数百万!)每次将新实体添加到@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
的类,因此在A
(以及B、C、D
)中有多个@OneTomany
关系,需要进行跟踪。这很快就会变得乏味。而且,每次添加someClass
的新实例时,我都需要加载整个集合,这似乎非常低效(我几乎最终将整个数据库加载到内存中,只是为了级联删除!!!)。
在不修改底层数据库(例如在定义中指定DELETE CASCADE)的情况下,我如何实现我想要的,想必JPA的设计者已经考虑过这样的用例了吧?在向关系中添加实体时需要加载整个集合(如果是这样,请解释原因:)),这可能是错误的。
要在不初始化所有实体的情况下实现多级级联,您只能使用DB级联。
别无他法!这就是为什么你找不到满意的解决办法。
至于:
@OrderColumn(name="orders_index")
public List<Order> getOrders() { return orders; }
索引列表将使用索引键进行添加/删除/更新操作。与只删除所有元素并用剩余元素重新创建集合的Bag相反,index List将使用index键仅删除不再属于List的元素。
环境:Spring 4.0.3,spring-data-jpa 1.2.0,Hibernate 4.2.10,jackson 2.3.3,lombok 1.12.6, 科目实体(已编辑) 用户实体(已编辑) 事务管理器(编辑)
我的实体之间有一个复杂的层次结构。由于一个错误(见下文),我在许多地方放入了cascade.all或cascade.persisted。从上到下,注释都可以。但自下而上,不是我想要的。 它会导致对象被重复保存。 我如何解决这个问题?? 无级联错误: InvalidStateException:在刷新期间通过字段“com.xxx.yyy.data.entity.f.e”级联持久性时,遇到了处于生命周
我在将带有@ManyToOne关系的实体(雇员)映射到带有@OneToMany关系的实体(社区)时遇到了问题。 当我将一个实体(社区)分配给一个实体(员工),其中社区的值为空时,它工作正常。 问题出现了,如果雇员已经为社区分配了价值。当我更改该值并保存更改时,该员工为社区获得了新的值,并且这个新社区在集合中获得了该员工。唯一的问题是,老社区仍然有这个员工在收集,但它应该被删除。这只有在数据库重新启
问题内容: 我有一个设置,其中猫可以由许多所有者拥有,每个所有者可以拥有几只猫。鉴于此,我想写一个说明来帮助我找到具有给定主人姓名的所有猫。 这是一个简单的类设置。 *为简洁起见,没有getters / setter。id字段在超类中。 *为简洁起见,没有getters / setter。id字段在超类中。 这是一个存储库,其中包含有效的查询和无效的规范。 请帮我写规范。 我遇到的麻烦是,这种关系
假设我们有两个实体,Entity和Entity。有多个s。节点可以属于多个集群。因此,在
这就是我在教师实体中所拥有的: 现在我喜欢使用数据库的功能。重复一遍:数据库的删除级联功能只针对Student_Teacher-table! 问题是: 问题是:这很好,但是要触发删除中的条目,我必须在两边指定。Hibernate不解析,只看到,并将目标实体(和引用的学生)从缓存中删除,但它们仍然在数据库中!!!因此,我不得不在空降后彻底清除Hibernate期,重新阅读教师、傅太太、巴尔先生和学生