Hibernate 继承模型删除时的级联

Pet*_*ter 3 java postgresql hibernate jpa cascade

我有一个表定义如下:

    @实体
    @桌子
    @Inheritance(策略=InheritanceType.JOINED)
    公共类表实现可序列化{
        @ID
        @GenerateValue
        私人长ID;
    ...
    }

然后我有一个继承表:

    @实体
    @桌子
    公共类子表扩展表{
        ...
    }

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

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

Vla*_*cea 6

如果您始终使用 Hibernate 来执行删除,Hibernate 可以处理级联删除。

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

如果你想使用 SQL 级别删除,假设你正在使用 hbm2ddl (你不应该这样做,因为你应该使用 Flyway),那么你需要SubTable使用 @OnDelete 注释来注释:

@Entity
@Table
@OnDelete(action = OnDeleteAction.CASCADE)
public class SubTable extends Table {
    ...
}
Run Code Online (Sandbox Code Playgroud)