Hibernate 继承模型的级联删除
问题:Hibernate 继承模型的级联删除 我有一个这样定义的表: @实体 @桌子 @Inheritance(策略u003dInheritanceType.JOINED) 公共类表实现可序列化{ @ID @GeneratedValue 私人长ID; ... } 然后我有一个继承的表: @实体 @桌子 公共类子表扩展表{ ... } Hibernate 在我的 Postgres 数据库中正确创建了
问题: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 {
...
}
更多推荐
所有评论(0)