在Hyperjaxb中自定义@Embedded属性的列名

时间:2017-09-11 14:04:44

标签: java hyperjaxb

当使用带有@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

如何实施此类自定义?

我尝试查看customizations guide并手头有tests源代码,但无法找到任何相关内容。

0 个答案:

没有答案