orm - Intershop EDL 建模 - 如何使用级联删除添加依赖项
问题描述
我们有一些通过 EDL 建模的自定义对象,这些对象具有系统 Intershop 对象(ISPRODUCT 和 ISRDER)的外键。当引用的订单或产品被删除时,我们需要删除我们的对象。
这是 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 缓存中浮动。
我将使用此注册侦听器解决方案来删除这些对象,以便更新所有内容并将其从缓存中清除。
我确实想知道代码生成器如何处理关系上的这个删除属性。
推荐阅读
- angular - 日期范围选择器
- macos - Visual Studio for Mac 的调试器老是报错“程序不存在”
- python - 分布式1.21.8需要msgpack,没有安装
- google-apps-script - 从更新的网站谷歌应用脚本中获取信息
- python - Scrapy 从 XPath 返回空数组
- c# - 使用 ANTLR4、C# 和 VS2017 编写自定义解析器
- java - AWS Java 开发工具包:调用 AmazonSQSClient.receiveMessage 时出现 AbortedException
- spring - 如何使用 Kotlin 在 Spring JPA 中正确查询实体
- scala - 保存到分区 parquet 文件时实现并发
- python - 当包含在其他模板中时,Django 通用 FormView 不显示