0

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

我试过了,hj:generated-property但它什么也没做。

为了提供到目前为止我尝试过的示例,我使用来自 git 源的 PO 示例进行了测试,标记为 0.6.0 ejb/tests/po-customized,并将其添加到绑定中...

绑定.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 testPurchaseOrderType没有新字段。测试运行没有错误。

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

4

2 回答 2

0

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

考虑使用代码注入器插件之类的东西,或者为生成的类指定一个超类。超类将有额外的字段。

披露:我是 Hyperjaxb3 的作者。

于 2015-03-18T19:24:49.593 回答
0

按照@lexicore 的建议实施代码注入器解决方案来解决(谢谢!)

我需要在两个文件中进行如下更改:

绑定.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配置中添加arg

...
<arg>-Xinject-code</arg>
...

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

于 2015-03-25T02:04:08.703 回答