我的impex存在问题,其中包含文档ID引用。
来自docs: “特别是对于导入partOf项值,有必要通过常用的唯一列技术之外的方式引用这些项,因为partOf项通常不提供唯一键,而只是将其封闭父项作为外键。”
来自* items.xml的项目(仅限最重要的部分)
<itemtype code="A" autocreate="true" generate="true" abstract="true"/>
<itemtype code="B" autocreate="true" generate="true" extends="A">
<deployment table="btable" typecode="20115" />
<attributes>
<attribute qualifier="code" type="java.lang.Integer" autocreate="true" generate="true">
<persistence type="property"/>
<modifiers optional="false"/>
</attribute>
</attributes>
</itemtype>
<itemtype code="C" autocreate="true" generate="true">
<deployment table="ctable" typecode="20117" />
<attributes>
<attribute qualifier="code" type="java.lang.String" autocreate="true" generate="true">
<persistence type="property"/>
<modifiers optional="false" unique="true"/>
</attribute>
<attribute qualifier="test" type="A" autocreate="true" generate="true">
<persistence type="property"/>
<modifiers optional="false" partof="true"/>
</attribute>
</attributes>
</itemtype>
Impex代码:
INSERT B;code;&docIdRef
;1;docId
INSERT_UPDATE C;code[unique=true];test(&docIdRef)
;uniqueCode;docId
错误讯息:
cannot create C with values ItemAttributeMap[ registry: null, type: <null>, (...) due to [de.hybris.platform.servicelayer.interceptor.impl.MandatoryAttributesValidator@3b777877]:missing values for [test] in model C
当我从'test'属性(C类)中删除'partof'修饰符时,一切正常。
我想知道如果我想保留'partof'修饰符,impex应该是什么样的。
答案 0 :(得分:1)
使用partOf
时,您必须使用所有者引用partOf
。
所以它确实:
INSERT B;owner(C.code);&docIdRef
;uniqueCode;docId
INSERT_UPDATE C;code[unique=true];test(&docIdRef)
;uniqueCode;docId
您无需为B
分配标识符,只需要引用所有者。
答案 1 :(得分:0)
如果您确定数据是正确的,可以使用[forceWrite = true]修饰符或传统模式跳过服务层验证。
您还应确保此配置是您真正需要的。将optional设置为true或将partOf设置为false或提供默认值也可以解决问题。
答案 2 :(得分:0)