如何确保空XML标签仍能填充父键FooID?
空Bar标签无法填充FooID子键的XML层面解决方案
父实体Foo与子实体Bar存在关联映射,当Bar标签包含内容时,子表的FooID列会正常填充父键值:
示例XML:
<Bar> <Anything/> </Bar>
对应数据库表数据:
| FooID | OtherColumns | ... |
|---|---|---|
| FooID_1 |
但当Bar是空标签或自闭合标签时:
<Bar></Bar> <!-- 或 --> <Bar/>
FooID列不会被填充:
| FooID | OtherColumns | ... |
|---|---|---|
当前使用的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
相关产品推荐
相关产品推荐

