hyperjaxb3添加额外的列(即创建时间戳)

时间:2015-03-11 15:17:43

标签: java hibernate xsd jaxb hyperjaxb

我试图添加一个额外的列,使用绑定文件到从xsd(一个大的)获得的模型。添加的字段需要保留,但不能序列化。

我尝试使用hj:generated-property但它没有做任何事情。

为了给出我到目前为止所尝试的样本,我在标签0.6.0 ejb / tests / po-customized上使用PO Sample from git sources进行了测试,并将其添加到绑定...

bindings.xjb

...
        <jaxb:bindings node="xs:complexType[@name='PurchaseOrderType']">
            <hj:entity>
                <orm:table name="po"/>
                <!-- adding creation timeStamp -->
                <hj:generated-property name="creationTimestamp" propertyName="creationTimestamp" propertyQName="creationTimestamp"
                    propertyKind="xs:dateTime" />
            </hj:entity>
        </jaxb:bindings>
...

运行mvn clean test时, PurchaseOrderType 没有新字段。测试运行没有错误。

是否可以添加这样的字段?

2 个答案:

答案 0 :(得分:0)

不可能。 hj:generated-property用于自定义生成属性,而不是生成新属性。

考虑使用类似Code Injector插件的内容,或者为生成的类指定超类。超类将有其他字段。

披露:我是Hyperjaxb3的作者。

答案 1 :(得分:0)

根据@lexicore(谢谢!)

的建议实施Code Injector solution解析

我需要对两个文件进行更改,如下所示:

<强> bindings.xjb

...
        <jaxb:bindings node="xs:complexType[@name='PurchaseOrderType']">
            <hj:entity>
                <orm:table name="po"/>
                <!-- REMOVED! hj:generated-property -->
            </hj:entity>
            <ci:code>
// Added for DB only, avoid XML serialization
@XmlTransient
protected Calendar creationTimestamp;

@Basic
@Column(name = "CREATION_TIMESTAMP")
@Temporal(TemporalType.TIMESTAMP)
public Calendar getCreationTimestamp() { return this.creationTimestamp; }

public void setCreationTimestamp(Calendar creationTimestamp) { this.creationTimestamp = creationTimestamp; }
            </ci:code>
        </jaxb:bindings>
...

<强>的pom.xml

maven-jaxb21-plugin config

中添加 arg
...
<arg>-Xinject-code</arg>
...

考虑到,在添加的代码中,有一些类引用了导入的包,如果它们未导入,则需要在注入的代码中放置完全限定的名称。无法将import添加为注入代码。