簡體   English   中英

Intershop EDL建模-如何通過級聯刪除添加依賴項

[英]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.

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