【问题标题】:Deletion order for contained @OneToMany members包含的@OneToMany 成员的删除顺序
【发布时间】:2011-05-07 19:32:33
【问题描述】:
@Entity public class Organization {

@OneToMany 
List<A> Aobjects;


@OneToMany 
List<B> Bobjects;


@OneToMany 
List<C> Cobjects;

}

我在所有@OneToMany 成员上都有@OnDelete 注释。删除父对象时,删除这些对象的顺序是什么。假设它是声明对象的顺序是否安全。

【问题讨论】:

  • 你尝试的时候发生了什么?
  • 当您执行级联删除时,我看不到 SQL 日志。但是我遇到了一些问题,如果 B 反过来具有对 A 的外键引用,这会导致 A 在删除时失败。因此问题

标签: hibernate jpa h2 cascading-deletes


【解决方案1】:

我在所有@OneToMany 成员上都有@OnDelete 注释。删除父对象时,删除这些对象的顺序是什么。假设它是声明对象的顺序是否安全。

因此,您使用的是 SQL 级联删除时删除,而不是常规的 Hibernate 机制。由于您使用的是数据库机制,我很想说声明对象的顺序无关紧要(数据库根本不知道这个顺序),我只是希望数据库能够适当地处理事情。

如果您从注释生成模型,它可能会影响列的顺序,但是:

  • 如果这会产生任何影响,我会感到非常惊讶,这会使一切变得非常脆弱,无法使用。
  • Hibernate/JPA 没有说明列的顺序(因为这无关紧要,见上文)。

但是我遇到了一些问题,如果 B 又具有对 A 的外键引用,这会导致 A 在删除时失败

您应该在问题中提到,这非常相关 IMO。对我的回答持保留态度,但正如我所说,我希望数据库引擎能够适当地处理事情,数据库引擎具有执行此操作所需的所有元数据。但我不是数据库专家,我不确定这个理论是怎么说的。

也许可以看看以下问题:

或询问有关理论(以及给定引擎的实践)的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    相关资源
    最近更新 更多