关于Hibernate继承模型的删除级联

时间:2014-07-15 13:01:07

标签: java hibernate postgresql jpa cascade

我有一个表定义如下:


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

然后我有一个继承的表:


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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

如果要使用SQL级别删除,假设您使用的是hbm2ddl(which you shouldn't do since you should use FlywayDB),则需要使用@OnDelete注释注释SubTable

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