orm - Intershop EDL 建模 - 如何添加级联删除的依赖关系

标签 orm intershop

我们有一些通过 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 上重新启动代码生成器时,这些文件都会被覆盖。

在关系上,可以像这样定义删除操作:

relation promotionBenefitPOs : A1PromotionBenefitPO[0..n] inverse promotionPO implements promotionBenefits delete default;

是否可以通过系统对象的依赖来实现相同的效果?

最佳答案

我不知道 EDL 可以实现这一点,很高兴知道。我使用这种方法的问题是,orm 缓存不知道这些对象正在被 oracle 删除,因此可能会有幻影对象漂浮在 orm 缓存中。

我会用这个register listener解决方案删除这些对象,以便更新所有内容并将其从缓存中清除。

我确实想知道代码生成器如何处理关系上的这个删除属性。

关于orm - Intershop EDL 建模 - 如何添加级联删除的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52482649/

相关文章:

java - 使用 hibernate 而不映射到特定类

intershop - 从 ISML 渲染 PDF 并检索二进制数据

.net - 有没有办法用 Dapper 调用存储过程?

database - 如何在Intershop7.9中为自定义对象创建数据库表

angular - Storybook 在 Angular Intershop 项目中不起作用

unity-game-engine - 在 Unity 中使用 API 创建购物车

intershop - 自定义属性搜索建议

java - 映射非规范化 hibernate

php - 将变量传递给 PhpActiveRecord 中的 has_one 关系

java - 进行 O/R 映射时的命名约定