You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确保空XML标签仍能填充父键FooID?

空Bar标签无法填充FooID子键的XML层面解决方案

父实体Foo与子实体Bar存在关联映射,当Bar标签包含内容时,子表的FooID列会正常填充父键值:

示例XML:

<Bar>
    <Anything/>
</Bar>

对应数据库表数据:

FooIDOtherColumns...
FooID_1

但当Bar是空标签或自闭合标签时:

<Bar></Bar>
<!-- 或 -->
<Bar/>

FooID列不会被填充:

FooIDOtherColumns...

当前使用的XSD配置:

<sql:relationship name="Foo_Bar" parent="Foo" parent-key="id" child="Bar" child-key="FooID"/>
<xsd:element name="Foo" sql:relation="Foo" sql:relationship="SomeRel_Foo">
    <xsd:complexType>
        <xsd:sequence>
            ...
            <xsd:element name="Bar" sql:relation="Bar" sql:relationship="Foo_Bar">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="SomeElement1" type="xsd:string"/>
                        <xsd:element name="SomeElement2" type="xsd:string"/>
                    </xsd:sequence>
                    <xsd:attribute name="id" type="xsd:string"/>
                    <xsd:attribute name="FooID" type="xsd:string"/>
                </xsd:complexType>
            </xsd:element>
            ...

已尝试的XSD调整:

<xsd:attribute name="FooID" type="xsd:string" use="required"/>  
<!-- 以及 -->
<xsd:element minOccurs="0" name="OrgForm" type="xsd:string" />

XML层面修改方案

方案1:显式指定FooID属性

在空Bar标签或自闭合标签中手动添加FooID属性并赋值为父实体的id值,直接传递父键映射所需的数值:

<!-- 空标签写法 -->
<Bar FooID="FooID_1"></Bar>
<!-- 自闭合标签写法 -->
<Bar FooID="FooID_1"/>

该方式绕过映射工具对标签内容的判断逻辑,强制传递关联键值。

方案2:添加占位子元素

在空Bar标签中加入一个允许为空的占位子元素(需提前在XSD中配置该元素minOccurs="0"),让映射工具判定Bar标签存在内容,从而触发关联键填充:

<Bar>
    <OrgForm/>
</Bar>

若XSD中已设置该子元素minOccurs="0",自闭合标签<Bar/>也可生效,无需额外添加子元素。

内容的提问来源于stack exchange,提问作者Paradox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 03:09:25