Hyperjaxb3:如何让它使用超类的id?

时间:2015-05-14 01:15:29

标签: java hyperjaxb

我正在尝试从* .xsd文件生成一组Java类,这些文件都有一个共同的映射超类(称为DataObject)。到目前为止,我已经设法使用bindings.xjb文件中的以下内容生成属于DataObject后代的类:

  <jaxb:globalBindings localScoping="toplevel">
        <xjc:superClass name="com.companyname.model.DataObject"/>
        <jaxb:serializable uid="1" />
    </jaxb:globalBindings>

我的问题是Hyperjaxb3生成了自己的主键hjid,但DataObject已经包含主键,我需要/想要使用它。

那么,我如何阻止Hyperjaxb3为所有类生成hjid?我已经尝试过我在网上找到的各种建议,但它们对我不起作用。

1 个答案:

答案 0 :(得分:1)

您可以使用hj:id自定义元素将现有属性之一标记为标识属性。见如下:

<xs:complexType name="myType">
    <xs:sequence>
        <!-- ... -->
        <xs:element name="id" type="xs:int" minOccurs="0">
            <xs:annotation>
                <xs:appinfo>
                    <hj:id>
                        <orm:column name="MY_ID"/>
                        <orm:generated-value strategy="SEQUENCE" generator="my-sequence"/>
                        <orm:sequence-generator name="my-sequence" sequence-name="MY_SEQ"/>
                    </hj:id> 
                </xs:appinfo>
            </xs:annotation>
        </xs:element>
        <!-- ... -->
    </xs:sequence>
</xs:complexType>

OR

<xs:element name="id" type="xs:int" minOccurs="0">
    <xs:annotation>
        <xs:appinfo>
            <hj:id/>
        </xs:appinfo>
    </xs:annotation>
</xs:element>