首页 > 技术文章 > hybris items.xml 中使用index实现表的联合主键

wahaha603 2017-05-19 11:31 原文

SAP的hybris平台中,要定义一个表的主键比较简单,只要指定某个字段为unique即可。那么如果是复合主键呢?

在 items.xsd中是这么定义 unique的

<xs:attribute name="unique" type="xs:boolean" use="optional">
            <xs:annotation>
                <xs:documentation>If 'true', the value of this attribute has to be unique within all instances of this type. If there are multiple attributes marked as unique,

        then their combined values must be unique. Will not be evaluated at jalo layer, if you want to manage the attribute directly using jalo layer you have to               ensure uniqueness manually. Default is 'false'.

      </xs:documentation>
            </xs:annotation>
 </xs:attribute>

 

也就是说 联合主键可以通过 unique指定多个字段来达到要求。具体设置如下

<itemtype code="xxx" autocreate="true" generate="true" jaloclass="com.xxx.core.jalo.OrgSalesUnit">
                <deployment table="xxx" typecode="30001" />
                <attributes>
                    <attribute qualifier="code1" type="String" generate="true">
                        <persistence type="property"></persistence>
                        <modifiers read="true" write="true" search="true" optional="false" unique="true" />
                    </attribute>
                    <attribute qualifier="code2" type="String">
                        <modifiers read="true" write="true" search="true" optional="false" unique="true" />
                        <persistence type="property" />
                    </attribute>
</itemtype>

 

BUT 上面这么配置只会导致 code1 ,code2分别是unique的,并非code1+code2 为联合唯一,囧!

 

经测试,通过配置index 可以实现联合主键功能。配置如下,

 

<itemtype code="xxx" 

     <deployment table="xxx" typecode="30001" />
                <attributes>
                    <attribute qualifier="code1" type="String" generate="true">
                        <persistence type="property"></persistence>
                        <modifiers read="true" write="true" search="true" optional="false"  />
                    </attribute>
                    <attribute qualifier="code2" type="String">
                        <modifiers read="true" write="true" search="true" optional="false" />
                        <persistence type="property" />
                    </attribute>

          <indexes>
                    <index name="ProductSalesOrg" unique="true">
                        <key attribute="product"/>
                        <key attribute="salesOrg"/>
                    </index>
              </indexes>
</itemtype>

 

可通过impex导入数据进行测试


INSERT_UPDATE YourTableName;code1(code)[unique=true];code2(uid)[unique=true];
;000001;1234;
;000001;4321;

;000002;1234;
;000002;4321;

推荐阅读