[英]Intershop 7.10 Code generator alternate keys generation - NONUNIQUE
我們在Intershop DB中注意到,從7.9版本遷移到7.10版本時,備用密鑰的索引不會生成為UNIQUE INDEX。 這導致所有包含備用鍵(系統和自定義對象)的表都使用數據庫中的NONUNIQUE索引生成。 例如:
此外,生成.ddl文件代碼(CatalogCategoryLinkPO.dbindex.oracle.ddl):
/*
=============================================================================
File: CatalogCategoryLinkPO.dbindex.oracle.ddl
Generated by JGen Code Generator from INTERSHOP Communications AG.
=============================================================================
The JGen Code Generator software is the property of INTERSHOP Communications AG.
Any rights to use are granted under the license agreement.
=============================================================================
*/
SET ECHO ON
SET SERVEROUTPUT ON SIZE 1000000
VARIABLE table_space VARCHAR2(50)
VARIABLE recreate_indexes NUMBER;
EXEC :table_space := '&index_tablespace';
EXEC :recreate_indexes := '&recreate_indexes';
PROMPT /* Class com.intershop.beehive.xcs.internal.catalog.CatalogCategoryLinkPO */
PROMPT -- Foreign key indices
EXEC staging_ddl.create_index('CATALOGCATEGORYLINK_FK999', 'CATALOGCATEGORYLINK', '(TARGETCATEGORYID)', :table_space, 'NONUNIQUE', :recreate_indexes);
EXEC staging_ddl.create_index('CATALOGCATEGORYLINK_FK998', 'CATALOGCATEGORYLINK', '(SOURCECATEGORYID)', :table_space, 'NONUNIQUE', :recreate_indexes);
PROMPT -- Foreign key indices (dependencies)
EXEC staging_ddl.create_index('CATALOGCATEGORYLINK_FK997', 'CATALOGCATEGORYLINK', '(DOMAINID)', :table_space, 'NONUNIQUE', :recreate_indexes);
PROMPT -- Inversion Entry key indices
EXEC staging_ddl.create_index('CATALOGCATEGORYLINK_IE001', 'CATALOGCATEGORYLINK', '(TYPECODE)', :table_space, 'NONUNIQUE', :recreate_indexes);
EXEC staging_ddl.create_index('CATALOGCATEGORYLINK_IE002', 'CATALOGCATEGORYLINK', '(SOURCECATEGORYID,TARGETCATEGORYID,DOMAINID,TYPECODE)', :table_space, 'UNIQUE', :recreate_indexes);
PROMPT -- Searchable attribute indices
EXEC staging_ddl.create_index('CATALOGCATEGORYLINK_IE999', 'CATALOGCATEGORYLINK', '(DOMAINID)', :table_space, 'NONUNIQUE', :recreate_indexes);
EXEC staging_ddl.create_index('CATALOGCATEGORYLINK_AK001', 'CATALOGCATEGORYLINK', '(SOURCECATEGORYID,TARGETCATEGORYID,DOMAINID,TYPECODE)', :table_space, 'NONUNIQUE', :recreate_indexes);
PROMPT /* Class com.intershop.beehive.xcs.internal.catalog.CatalogCategoryLinkPOAttributeValue */
PROMPT -- Foreign key indices
EXEC staging_ddl.create_index('CATALOGCATEGORYLINK_AV_FK002', 'CATALOGCATEGORYLINK_AV', '(ownerID)', :table_space, 'NONUNIQUE', :recreate_indexes);
PROMPT -- Inversion Entry key indices
EXEC staging_ddl.create_index('CATALOGCATEGORYLINK_AV_IE002', 'CATALOGCATEGORYLINK_AV', '(intValue)', :table_space, 'NONUNIQUE', :recreate_indexes);
EXEC staging_ddl.create_index('CATALOGCATEGORYLINK_AV_IE003', 'CATALOGCATEGORYLINK_AV', '(doubleValue)', :table_space, 'NONUNIQUE', :recreate_indexes);
當我們嘗試為自己的自定義實現對象創建備用密鑰時,會發生同樣的事情。 例如,這是.edl代碼段:
orm class A1PromotionBenefitPO extends PersistentObjectPO implements A1PromotionBenefit table "A1PromotionBenefit"
{
/**
* Declare alternate key.
*/
alternate key (promotionUUID, tariffUUID, contractType, contractBinding, domainID);
/**
* Holds link to tariff.
*/
attribute tariffUUID : uuid required searchable;
/**
* Holds link to promotion.
*/
attribute promotionUUID: uuid required;
....
...
這是生成的.ddl文件(A1PromotionBenefitPO.dbindex.oracle.ddl):
/*
=============================================================================
File: A1PromotionBenefitPO.dbindex.oracle.ddl
Generated by JGen Code Generator from INTERSHOP Communications AG.
=============================================================================
The JGen Code Generator software is the property of INTERSHOP Communications AG.
Any rights to use are granted under the license agreement.
=============================================================================
*/
SET ECHO ON
SET SERVEROUTPUT ON SIZE 1000000
VARIABLE table_space VARCHAR2(50)
VARIABLE recreate_indexes NUMBER;
EXEC :table_space := '&index_tablespace';
EXEC :recreate_indexes := '&recreate_indexes';
PROMPT /* Class hr.a1.orm.promotion.internal.A1PromotionBenefitPO */
PROMPT -- Foreign key indices
EXEC staging_ddl.create_index('A1PROMOTIONBENEFIT_FK999', 'A1PROMOTIONBENEFIT', '(DISCOUNTUUID)', :table_space, 'NONUNIQUE', :recreate_indexes);
EXEC staging_ddl.create_index('A1PROMOTIONBENEFIT_FK998', 'A1PROMOTIONBENEFIT', '(PROMOTIONUUID)', :table_space, 'NONUNIQUE', :recreate_indexes);
PROMPT -- Foreign key indices (dependencies)
EXEC staging_ddl.create_index('A1PROMOTIONBENEFIT_FK997', 'A1PROMOTIONBENEFIT', '(DOMAINID)', :table_space, 'NONUNIQUE', :recreate_indexes);
EXEC staging_ddl.create_index('A1PROMOTIONBENEFIT_FK996', 'A1PROMOTIONBENEFIT', '(TARIFFUUID)', :table_space, 'NONUNIQUE', :recreate_indexes);
PROMPT -- Inversion Entry key indices
EXEC staging_ddl.create_index('A1PROMOTIONBENEFIT_IE001', 'A1PROMOTIONBENEFIT', '(PROMOTIONUUID,TARIFFUUID,CONTRACTTYPE,CONTRACTBINDING,DOMAINID)', :table_space, 'UNIQUE', :recreate_indexes);
PROMPT -- Searchable attribute indices
EXEC staging_ddl.create_index('A1PROMOTIONBENEFIT_IE999', 'A1PROMOTIONBENEFIT', '(DOMAINID)', :table_space, 'NONUNIQUE', :recreate_indexes);
EXEC staging_ddl.create_index('A1PROMOTIONBENEFIT_IE998', 'A1PROMOTIONBENEFIT', '(TARIFFUUID)', :table_space, 'NONUNIQUE', :recreate_indexes);
EXEC staging_ddl.create_index('A1PROMOTIONBENEFIT_AK001', 'A1PROMOTIONBENEFIT', '(PROMOTIONUUID,TARIFFUUID,CONTRACTTYPE,CONTRACTBINDING,DOMAINID)', :table_space, 'NONUNIQUE', :recreate_indexes);
如您所見,備用鍵索引A1PROMOTIONBENEFIT_AK001生成為NONUNIQUE。
你知道為什么會這樣嗎? 我們的代碼依賴於備用密鑰,因此我們不希望從我們的orm模型中完全刪除備用密鑰。
這似乎是7.10引入的錯誤。 您應該使用Intershop支持提交錯誤報告。
作為一種解決方法,您當然可以更改生成的DDL文件。 不確定您是否最終可以更改用作模板的ORMDDL.xpt來生成這些DDL文件。
我在內部創建了一個錯誤,當您向Intershop支持部門提交錯誤報告時,請參閱問題IS-26076。 通過支持,您將獲得狀態更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.