当前位置: 首页 > 知识库问答 >
问题:

Hibernate继承模型的级联删除

吴高峰
2023-03-14

    @Entity
    @Table
    @Inheritance(strategy=InheritanceType.JOINED)
    public class Table implements Serializable {
        @Id
        @GeneratedValue
        private Long id;
    ...
    }


    @Entity
    @Table
    public class SubTable extends Table {
        ...
    }

共有1个答案

李星波
2023-03-14

如果您总是使用Hibernate执行删除,那么它可以处理级联删除。

因此删除子表实体将会成功,并且它将同时删除子类表记录和相关联的基类行。

如果您想使用SQL级别的删除,假设您使用的是hbm2ddl(您不应该这样做,因为您应该使用Flyway),那么您需要使用@ondelete注释来注释子表:

@Entity
@Table
@OnDelete(action = OnDeleteAction.CASCADE)
public class SubTable extends Table {
    ...
}
 类似资料:
  • 起源: 儿童1: 我正在使用Hibernate映射在MySQL中创建表。我对冬眠是完全陌生的。正在创建表,并且子表有一个外键,它引用父表id,正如我提到的@PrimaryKeyJoinColumn注释。在子表中添加字段也会在扩展时将其添加到父表中。但删除父表中的行不会删除子表中的行。也许我在某个地方走错了路。我的最终目标是扩展父表,并使用子表向其添加记录。我需要一些指针。也许是其他注释,或者其他实

  • 我在Hibernate中有道传承,下面是代码: 用户DAO: 我有一个域类用户和两个子类用户:Customer和Sales。我有两个dao类,分别用于客户和销售。 用户DAO: 客户道: 销售DAO: 我的问题是,当我使用CusterDap调用方法getUserByUsername()(继承自BaseDaoImpl)与销售的用户名(拥有用户名的用户是SalesRep的实例,而不是客户)时,它会抛出

  • 问题内容: 让我有实体和实体。实体与有关系。 我想下一步: 如果我删除A,那么也必须删除B。 如果我删除B,那么A也不会删除。 我必须在哪个实体中设置 我必须在哪一边 ? 问题答案: 从A到B的级联应该放在类引用的字段上,从B到A的级联应该放在类引用的字段上。 应该在课堂上,因为您希望每个动作都可以级联。 应该在课堂上,因为您只希望级联某些操作

  • 问题内容: 我对级联=“删除”的工作方式感到困惑。我在“城市”映射文件中以以下方式定义了映射: 类客户具有类城市的外键。 因此,当我运行时: 是否还应该删除所有客户端,还是必须以某种方式处理它?我是否将查询作为方法参数正确传递给会话的delete()方法?谢谢你的帮助。最好的问候,混蛋。 问题答案: 我对cascade =“ delete”的工作方式有些困惑(…) 级联操作意味着,如果您是父母,则

  • 问题内容: 目前,我有这样的结构: 它使用联接表与每个子类一个表映射。由于历史原因,我也使用了一个鉴别器,因此当前情况如《 Hibernate手册》第9.1.3节所述 。 问题: 如何为这样的结构扩展映射: 我可以在hibernate映射中吗?什么我需要S’ 问题答案: 未测试, 但根据发布的链接(如果您使用的是hibernate3)

  • 我试图通过联接表的一个外键级联删除联接表中的行,它有另一个与之相关的表,我也想删除与此ID相关的所有行。看起来像下图。当我使用会话时。使用hibernate删除(reqCandObject)它工作正常,并通过从候选jobReq表中删除一个条目以及相关注释进行级联。但是,我想删除所有具有特定候选ID的候选项(并删除注释)。我尝试了下面的函数,但与nice hibernate不同。删除(对象)函数,此