1

当使用带有@Embedded 的属性时,列以不符合我的特定目标数据库的特定模式命名,因此我想自定义表的生成名称。

在我的特定用例中,我无法更改架构,并且当前在我的 bindings.xjb 中自定义为我的目标数据库。

我有一个“项目”,我只想保留它的值:

<xs:complexType name="item">
    <xs:simpleContent>
        <xs:extension base="xs:string">
            <xs:attribute name="unwantedAttr1" type="xs:string"/>
            <xs:attribute name="unwantedAttr2" type="xs:string"/>
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>

该项目在“MyGroup”(和其他)中用作元素类型。

<xs:element name="MyGroup">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="A01" type="item" />
        <xs:element name="A02" type="item" />
        <xs:element name="A03" type="item" />
      </xs:sequence>
    </xs:complexType>
</xs:element>

我想要以下结果表:

HJID | A01 | A02 | A03

在我的 bindings.xjb 中,我将要嵌入的项目和我不需要的属性设置为 @Transient:

<jaxb:bindings node="//xs:complexType[@name='item']">
    <hj:embeddable />
</jaxb:bindings>

<jaxb:bindings node="//xs:attribute[@name='unwantedAttr1']">
    <annox:annotate>
        <annox:annotate annox:class="javax.persistence.Transient"  />
    </annox:annotate>
</jaxb:bindings>

<jaxb:bindings node="//xs:attribute[@name='unwantedAttr2']">
    <annox:annotate>
        <annox:annotate annox:class="javax.persistence.Transient"  />
    </annox:annotate>
</jaxb:bindings>

我可以更改列名

<jaxb:bindings node="xs:element[@name='MyGroup']//xs:element[@name='A01']">
    <hj:column name="A01" />
</jaxb:bindings>      

但这只能让我到目前为止:

HJID | A01_VALUE | A02_VALUE | A03_VALUE

我怎样才能实现这样的定制?

我尝试查看自定义指南并获得带有测试的源代码,但找不到任何相关内容。

4

0 回答 0