簡體   English   中英

在jdo中不再引用對象時,如何從數據庫中刪除對象? (n:1關系)

[英]How to remove object from database when it's not referenced anymore in jdo? (n:1 relationship)

我有“角色”課和“派系”課。 角色有派系。 一個派系可以被許多角色使用。 當角色被保留時,派系將被保留。 當沒有更多的字符引用派系時,我想將其從數據庫中刪除。

當我有1:1關系時,這很容易,因為我可以使用

@Persistent(dependent = "true")

在不再需要它時將其刪除。 但這不可能了,因為現在可能還有另一個角色需要派系。 因此,如果我嘗試刪除character1並且他使用與character2相同的派系,則會收到以下異常:

java.sql.SQLIntegrityConstraintViolationException: DELETE on table 'FACTION' caused a violation of foreign key constraint 'CHARACTER_FK1' for key (1).  The statement has been rolled back.

我只希望在不需要更多角色時將其刪除。 我怎樣才能做到這一點?

它認為最好的解決方案將是數據庫本身,而不是Java。 您想在Character上放置一個ON DELETE觸發器,該觸發器將獲取當前記錄(正在刪除的記錄),查找其Faction,然后檢查Character表中是否有其他引用相同Faction的記錄。 如果存在其他引用該派系的記錄,則不執行任何操作。 如果沒有其他引用該派系的記錄,請刪除該派系。

如果您不能在數據庫服務器上執行此操作,則可以輕松地執行與上述代碼相同的操作。 將其直接放在數據庫中的好處是,您可以在一個始終執行該規則的地方定義規則,而不管用戶和數據之間有多少中間代碼層。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM