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:以上四種都是。
在此記錄學習過程中遇到的錯誤,也許我講的不是很清楚,哈哈,大佬還請勿噴,多多指教
相關文章
- 級聯刪除
- Could not resolve com.android.support.constraint:constraint-layout:1.1.3AndroidAI
- Apache httpclient的execute方法除錯ApacheHTTPclient除錯
- python 使用 delete 方法時報錯,可以正常刪除Pythondelete
- oracle級聯刪除使用者,刪除表空間Oracle
- sql 多表關聯刪除表資料SQL
- 升級pip報錯ERROR: Could not install packages due to an OSError: [WinError 5]ErrorPackage
- WireMock 的時候報錯:No response could be served as there are no stub mappings in this WireMockREMMockAPP
- list增強for迴圈刪除元素報錯
- MYSQL timestamp NOT NULL插入NULL的報錯問題MySqlNull
- EXECUTE IMMEDIATE 儲存過程中 許可權不足及EXECUTE IMMEDIATE的除錯避坑儲存過程除錯
- VUE—刪除HelloWorld.vue後報錯 `--fix` option報錯的解決Vue
- Hibernate SQL方言 (hibernate.dialect)SQL
- Oracle 刪除千萬級資料量時,可以考慮以下方法來提高刪除效率Oracle
- (一)Mybatis基本配置,Statement方式,動態代理增刪改查MyBatis
- eclipse配置Maven Settings.xml檔案報錯:Could not read settings.xmlEclipseMavenXML
- AndroidStudio升級報錯Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve cAndroidAPPCompile
- JAVA spring&hibernate資料來源配置不當報錯key postgresIsPoolJavaSpring
- pg_basebackup 報錯could not create directory
- 【YashanDB資料庫】自關聯外來鍵插入資料時報錯:YAS-02033 foreign key constraint violated parent key not found資料庫AI
- MySQL在刪除表時I/O錯誤原因分析MySql
- HV000030: No validator could be found for constraint ‘javax.validation.constraints.Pattern‘ validatiAIJava
- mySql刪除多個表 刪除多個欄位的SQLMySql
- 關於集合遍歷並刪除報錯詳解
- MybatisPlus自帶方法報錯BindingException: Invalid bound statement (not found)MyBatisException
- Could not execute Write_rows event on table time_task.tt_log
- 漏洞反饋,使用者授權報錯Integrity constraint violationAI
- 刪除表空間時,遇到了ORA-14404錯誤
- sshd啟動報錯Could not load host key
- 記一次SQL Server刪除SQL調優SQLServer
- 程式碼除錯的N種姿勢除錯
- list中for迴圈刪除多個元素為何報錯?
- SQL server開啟 安裝包時報錯SQLServer
- 匯入sql時報日期型別錯誤SQL型別
- 報錯Invalid bound statement (not found): com.thxy.mapper.RoleMapper.insertRleAPP
- 使用android studio 建立app時報錯:Could not download junit.jar(junit:junit:4.12)AndroidAPPJAR
- Hibernate配置OracleOracle
- Laravel 54 配置 Elasticsearch 時的報錯提示LaravelElasticsearch