[英]Intershop EDL modelling - How to add dependency with on cascade delete
我們有一些通過EDL建模的自定義對象,這些對象具有系統Intershop對象(ISPRODUCT和ISORDER)的外鍵。 當引用的訂單或產品被刪除時,我們需要刪除對象。
這是EDL文件的摘錄:
/**
* Relation to product PO (tariff item)
*/
dependency tariff: ProductPO
{
foreign key(tariffID);
}
/*
* Order relation
*/
dependency order: OrderPO
{
foreign key(orderID);
}
如我所見,可以在EDL關系上添加刪除操作,但不能在依賴項上添加刪除操作。
目前,我們正在做的就是修改生成的dbconstraints.oracle.ddl文件中的語句,如下所示:
EXEC staging_ddl.add_constraint('A1APPLICATIONFORM', 'A1APPLICATIONFORM_CO_003', 'FOREIGN KEY (TARIFFID) REFERENCES PRODUCT (UUID) ON DELETE SET NULL INITIALLY DEFERRED DEFERRABLE DISABLE NOVALIDATE');
EXEC staging_ddl.add_constraint('A1APPLICATIONFORM', 'A1APPLICATIONFORM_CO_004', 'FOREIGN KEY (ORDERID) REFERENCES ISORDER (UUID) ON DELETE CASCADE INITIALLY DEFERRED DEFERRABLE DISABLE NOVALIDATE');
但這只是暫時的解決方法,因為每次我們在EDL上重新啟動代碼生成器時,這些文件都會被覆蓋。
在關系上,可以這樣定義on刪除操作:
relation promotionBenefitPOs : A1PromotionBenefitPO[0..n] inverse promotionPO implements promotionBenefits delete default;
是否可以在與系統對象的依賴關系上實現相同的目標?
很高興知道,我不知道EDL可以做到這一點。 我用這種方法的問題是,orm緩存不知道oracle正在刪除這些對象,因此它可能使幻影對象在orm緩存中浮動。
我將使用此注冊偵聽器解決方案刪除這些對象,以便所有內容均被更新並從緩存中清除。
我確實想知道代碼生成器如何處理關系上的此delete屬性。
恐怕您需要手動執行此操作。 意味着一旦刪除了所涉及類型的實例,則需要查詢自定義膠水對象,然后通過自己的操作將其刪除。 由於依賴關系只是orm無法自動刪除的弱(單向)關系。 請參閱此處以獲取有關EDL依賴性的文檔: https : //support.intershop.com/kb/index.php/Display/247P28
例如,我檢查了ProcessPagelet-Delete pipline。 在這里,我們首先從要刪除的Pagelet
取消分配( 即刪除分配 ) Label
對象。 如您在此處看到的那樣, PageletLabelAssingmentPO
包含對Pagelet
的依賴關系:
orm class PageletLabelAssignmentPO extends LabelAssignmentPO
{
attribute pageletUUID : uuid;
dependency pagelet : PageletPO
{
foreign key(pageletUUID);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.