當Hibernate(或其他JPA實現)爲@OneToMany關係創建外鍵時,是否有辦法迫使它在數據庫級別使用ON DELETE CASCADE?我發現,當我使用CascadeType.DELETE時,Hibernate不會在數據庫級別執行此操作,而是會發送兩個刪除語句(用於父級和子級記錄)。或者也許有一個很好的理由呢?強制Hibernate使用ON DELETE CASCADE創建外鍵
0
A
回答
2
在Hibernate中,您可以在@OneToMany關係使用
@OnDelete(action = OnDeleteAction.CASCADE)
。這告訴hibernate爲生成的外鍵設置ON DELETE CASCADE。
請注意,這是一個hibernate擴展,並未在JPA標準中指定。
請謹慎使用。當您讓數據庫級聯刪除時,這些會發生在休眠控制之外:
- 您的二級緩存可能會失去同步。
- 你不能使用刪除這些實體的偵聽器。
我想你應該只使用這個,如果你有一個大的集合和性能的考慮迫使你讓數據庫處理刪除而不是休眠。
0
他們不是一回事。 JPA級聯遍歷向下對象圖,而數據庫外鍵行爲有效地遍歷對象圖。例如,讓我們說你有一對單向關係
class House {
@OneToOne
Object door;
}
如果使用CascadeType.REMOVE然後刪除房子也將刪除門。
@OneToOne(cascade=CascadeType.REMOVE)
Object door;
如果您使用@OnDelete,那麼刪除門也會刪除房屋。
@OneToOne
@OnDelete(action = OnDeleteAction.CASCADE)
Object door;
在這裏閱讀更多:http://www.ninthavenue.com.au/jpa-cascadetype-remove-vs-hibernate-ondelete
相關問題
- 1. 外鍵與「ON DELETE CASCADE」
- 2. SQLite的外鍵,ON DELETE CASCADE和SQLITE_CONSTRAINT
- 3. ON DELETE CASCADE
- 4. MySQL ON DELETE CASCADE
- 5. 刪除ON DELETE CASCADE
- 6. ON DELETE CASCADE SQLite中
- 7. ON DELETE CASCADE在MySQL
- 8. ON DELETE CASCADE支持?
- 9. 如何在Oracle上使用「ON UPDATE CASCADE」創建外鍵?
- 10. ON DELETE CASCADE不起作用
- 11. NHibernate映射不添加ON DELETE CASCADE選項外鍵引用
- 12. MySQL外部約束ON DELETE CASCADE
- 13. 使用Hibernate創建外鍵
- 14. SQLite的外鍵DELETE CASCADE不工作
- 15. NHibernate的一對一外鍵DELETE CASCADE
- 16. Hibernate映射:delete-orphan cascade
- 17. MS SQL「ON DELETE CASCADE」指向同一個表的多個外鍵?
- 18. ON DELETE CASCADE - 兩個或兩個以上的外鍵需要
- 19. 無法設置外鍵在DELETE ON CASCADE上
- 20. INSERT OR REPLACE +外鍵ON DELETE CASCADE工作太好
- 21. 實體框架ON DELETE CASCADE
- 22. SQL ALTER TABLE ON DELETE CASCADE
- 23. MySQL的ON DELETE CASCADE不行
- 24. MongoDB的DBREF ON DELETE CASCADE
- 25. PostgreSQL的:FOREIGN KEY/ON DELETE CASCADE
- 26. 參考週期:ON DELETE CASCADE?
- 27. ON DELETE CASCADE不工作
- 28. SQL Server ON DELETE CASCADE錯誤
- 29. Oracle:通過引用將ON DELETE CASCADE添加到分區中使用的外鍵
- 30. CASCADE DELETE兩個外鍵約束