问题:Hibernate 继承模型的级联删除

我有一个这样定义的表:

@实体

@桌子

@Inheritance(策略u003dInheritanceType.JOINED)

公共类表实现可序列化{

@ID

@GeneratedValue

私人长ID;

...

}

然后我有一个继承的表:

@实体

@桌子

公共类子表扩展表{

...

}

Hibernate 在我的 Postgres 数据库中正确创建了两个表,但它将两个表之间的删除操作定义为“NO ACTION”。

如何在 Hibernate 中定义我希望在删除时定义 CASCADE 操作?例如,当我从表 Table 中手动删除一行时,我想自动获取表 SubTable 中要删除的相应行。当我现在尝试从 Table 中删除一行时,它返回给我外键约束违规错误。

解答

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

因此,删除 SubTable 实体将成功,它还将删除子类表记录和关联的基类行。

如果您想使用 SQL 级别的删除,假设您使用的是 hbm2ddl(您不应该这样做,因为您应该使用 Flyway](https://vladmihalcea.com/flyway-database-schema-migrations/)),那么您需要使用 @OnDelete 注释对SubTable进行注释:

@Entity
@Table
@OnDelete(action = OnDeleteAction.CASCADE)
public class SubTable extends Table {
    ...
}
Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐