0

xsd (大きなモデル) から取得したモデルへのバインド ファイルを使用して、余分な列を追加しようとしています。追加されたフィールドは永続化する必要がありますが、シリアル化する必要はありません。

で試しましhj:generated-propertyたが、何もしません。

これまでに試したことのサンプルを提供するために、タグ 0.6.0 ejb/tests/po-customized でgit ソースの PO サンプルを使用してテストし、これをバインディングに追加しました...

バインディング.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に新しいフィールドがありません。テストはエラーなしで実行されます。

このようなフィールドを追加することは可能ですか?

4

2 に答える 2

0

ありえない。hj:generated-property新しいプロパティを生成するためではなく、生成プロパティをカスタマイズするために使用されます。

Code Injectorプラグインのようなものを使用するか、生成されたクラスのスーパークラスを指定することを検討してください。スーパークラスには追加のフィールドがあります。

開示:私は Hyperjaxb3 の作成者です。

于 2015-03-18T19:24:49.593 に答える
0

@lexicore の提案に従って解決するCode Injector ソリューションの実装(ありがとう!)

次のように、2 つのファイルを変更する必要がありました。

バインディング.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>-Xinject-code</arg>
...

追加されたコードには、インポートされたパッケージを参照するクラスがいくつかあることを考慮してください。それらがインポートされていない場合は、挿入されたコードに完全修飾名を入れる必要があります。importインジェクトされたコードとして追加することはできません。

于 2015-03-25T02:04:08.703 に答える