我们已经在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模型中一起删除备用键。
答案 0 :(得分:3)
这似乎确实是7.10中引入的错误。您应该向Intershop支持提交错误报告。
作为解决方法,您当然可以更改生成的DDL文件。不知道您是否最终可以更改用作模板以生成那些DDL文件的ORMDDL.xpt。
我在内部创建了一个错误,当您向Intershop支持人员提交错误报告时,请参阅问题IS-26076。通过支持,您将获得状态更新。