2014-07-15 30 views
1

我定義爲這樣的表:級聯上刪除對Hibernate的繼承模式

 

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

然後,我有一個繼承表:

 

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

休眠正確在我的Postgres數據庫,但它創建了兩個表將兩個表之間的刪除行爲定義爲「不行動」。

如何在Hibernate中定義我想要在刪除時定義CASCADE動作?例如,當我從表中手動刪除一行表我想自動獲取表子表中對應的行被刪除。當我嘗試從中刪除一行時,它會返回外鍵約束違規錯誤。

回答

3

如果您總是使用它來執行刪除,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 { 
    ... 
}