JPA一對多關係,在一端更新所包含多端引用的問題

2021-09-30 06:30:07 字數 786 閱讀 9712

在jpa一對多關係中,如

學校類:

學生類:

當我們在程式中更新school時,如:

當前school中有學生1,2,3。我們現在要將學生更新為1,3,4.

即重新set school類中的students集合,然後merge(更新)school物件。

但是當你檢視資料庫時會發現,school表中沒有問題,但是student表裡有問題了,學生2中關聯school的外來鍵為null了。

如果你在建表中約束了該外來鍵不能為空的話,jpa會報sql外來鍵完整性約束異常。

該問題在jpa1.0中沒有比較好的解決辦法,只好用兩種比較不太好的辦法解決:

1.在資料庫中寫乙個觸發器,清理student表中school外來鍵為null的記錄。

2.在更新時,先刪除,在儲存。這種效能是個嚴重的問題。

還好在jpa2.0中該問題有了比較好的解決辦法。

在多端加入:orphanremoval=true(孤值刪除)配置

public class school  

public class student

其他的什麼都不用改變,在school物件中重新set students集合後,merge(更新)school物件。

重新檢視資料庫,你會發現school表正確,student表中也正確,jpa自動刪除了外來鍵為null的記錄。完美解決問題。

注意:是jpa2.0中才加入的,只有@onetoone和@onetomany可以新增。

JPA雙向一對多關聯關係

用法和單向一對多和單向多對一用法是一樣的,需要說的就是讓那一邊來維護關聯關係,如果不考慮這個也沒什麼關係,考慮的話可以對效能有一點提公升。joincolumn name customer id public setgetorders 預設兩邊維護關聯關係 若先儲存n的一端,再儲存1的一端,則兩邊在傳...

sqlalchemy 一對多 關係

import os import sqlalchemy from sqlalchemy import create engine,column,integer,string,foreignkey,sequence from sqlalchemy.ext.declarative import decl...

Mvc Entityfraome一對多關係對映

第一資料庫建立 第二建立mvc ef專案 注意要點 如下資料庫表 t classes,t students 建立兩個類與資料庫表相對應 public class class public string name public virtual icollectionstudent new list p...