hibernate配置級聯刪除時報錯:could not execute statement; SQL [n/a]; constraint [null]
做部落格管理系統時,部落格和評論時一對多,多對一的關係,
一個部落格多條評論,在刪除部落格時候報錯
錯誤資訊如下:
could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
我的資料庫裡面blo_id不允許為空導致刪除部落格出現報錯
解決方案:
在實體類 blog裡面新增級聯,問題解決
cascade(級聯)
級聯在編寫觸發器時經常用到,觸發器的作用是當 主控表資訊改變時,用來保證其關聯表中資料同步更新。若對觸發器來修改或刪除關聯表相記錄,必須要刪除對應的關聯表資訊,否則,會存有髒資料。所以,適當的做法是,刪除主表的同時,關聯表的資訊也要同時刪除,在hibernate中,只需設定cascade屬性值即可。
cascade表示級聯操作,在hibernate配置註解 @OneToOne,@OneToMany,@ManyToMany,@ManyToOne中的屬性。
例如:
cascade屬性
cascade:就是對錶進行增,刪,改(查詢與它無關)的時候對級聯表進行操作
cascade屬性的可選值:
all :所有情況下均進行關聯操作。
none:所有情況下均不進行關聯操作。這是預設值。
save-update:在執行save/update/saveOrUpdate時進行關聯操作。
delete:在執行delete時進行關聯操作。
inverse
inverse:決定主表還是從表維護關係
兩個可選屬性false與true
inverse屬性預設是false,若為false,則關聯由自己控制,
若為true,則關聯由對方控制。
一般inverse=false會放在多的一端,
inverse 和 cascade兩屬性不同的值hibernate對應不同的行為
inverse=true, cascade=delete | 版本被刪除,版本與專案的關聯關係記錄被刪除 |
---|---|
inverse=false, cascade=delete | 版本被刪除時,hibernate嘗試置關聯關係為當前版本的記錄,版本欄位為null. 當置位失敗時,版本不能刪除 |
配置多種級聯
例如:
-
CascadeType.PERSIST:級聯新增(又稱級聯儲存):對order物件儲存時也對items裡的物件也會儲存。對應EntityManager的presist方法。
-
例子:只有A類新增時,會級聯B物件新增。若B物件在資料庫存(跟新)在則拋異常(讓B變為持久態)
-
CascadeType.MERGE:級聯合並(級聯更新):若items屬性修改了那麼order物件儲存時同時修改items裡的物件。對應EntityManager的merge方法
。 例子:指A類新增或者變化,會級聯B物件(新增或者變化) -
CascadeType.REMOVE:級聯刪除:對order物件刪除也對items裡的物件也會刪除。對應EntityManager的remove方法。
例子:REMOVE只有A類刪除時,會級聯刪除B類;
-
CascadeType.REFRESH:級聯重新整理:獲取order物件裡也同時也重新獲取最新的items時的物件。對應EntityManager的refresh(object)方法有效。即會重新查詢資料庫裡的最新資料。
CascadeType.ALL:以上四種都是。
在此記錄學習過程中遇到的錯誤,也許我講的不是很清楚,哈哈,大佬還請勿噴,多多指教
相關文章
- 級聯刪除
- python 使用 delete 方法時報錯,可以正常刪除Pythondelete
- Last_SQL_Error: Could not execute Update_rows eventASTSQLError
- oracle級聯刪除使用者,刪除表空間Oracle
- hibernate批量刪除
- oracle中的級聯刪除(轉)Oracle
- phpcms生成兩級選單的程式碼以及後臺刪除內容時報錯PHP
- sql觸發器刪除資料庫中的級聯記錄SQL觸發器資料庫
- sql 多表關聯刪除表資料SQL
- Apache httpclient的execute方法除錯ApacheHTTPclient除錯
- RMAN中刪除歸檔時報錯RMAN-08137
- AIX 上配置完成TSM API後,備份DB2時報SQL2062N錯誤AIAPIDB2SQL
- 主外來鍵關聯刪除(on delete set null和on delete cascade)deleteNull
- JN專案-觸發器級聯刪除觸發器
- Hibernate 一對多配置 級聯操作(級聯失敗問題分析解決)
- mysql中外來鍵約束級聯更新與刪除MySql
- PL/SQL Developer啟動時報錯,Initialization error could not load xxxx\oci.dllSQLDeveloperError
- Project的一級WBS刪除後再建立出錯Project
- Could not resolve com.android.support.constraint:constraint-layout:1.1.3AndroidAI
- MySQL 多表關聯刪除MySql
- Oracle 多表關聯刪除Oracle
- Percona MySQL 5.6 語句加鎖報錯"ERROR 1665 (HY000): Cannot execute statement"MySqlError
- JN專案-用程式碼級聯刪除評論和收藏
- 在MySQL中利用外來鍵實現級聯刪除(轉)MySql
- Linux su 切換到某使用者時報錯: could not open sessionLinuxSession
- (一)Mybatis基本配置,Statement方式,動態代理增刪改查MyBatis
- 匯入sql時報日期型別錯誤SQL型別
- SQL server開啟 安裝包時報錯SQLServer
- 手工刪除歸檔日誌導致RMAN備份時報ORA-19625錯誤
- EXECUTE IMMEDIATE 儲存過程中 許可權不足及EXECUTE IMMEDIATE的除錯避坑儲存過程除錯
- jsp+javaBean+hibernate 執行時報錯,大家幫著看看!JSJavaBean
- 檢視oracle 資料庫中的級聯刪除(delete cascade)Oracle資料庫delete
- Statement (操作 SQL 語句)SQL
- 程式碼除錯的N種姿勢除錯
- 配置Oracle Streams時在刪除程式出錯ORA-26663Oracle
- Windows下批次刪除N天前的檔案Windows
- linux自動刪除N天前檔案Linux
- SQL NULLSQLNull