2

xsd-Schema から Java クラスを生成する Maven プロジェクトをセットアップしました。最初に maven-hyperjaxb3-plugin を構成し (以下の pom.xml スニペットを参照)、エンティティーにデフォルトの JPA2 アノテーションを配置できるようにします。この注釈の 1 つは @java.persitence.Table(name = "table_name") です。スキーマの名前も入れられるように、外部グローバル バインディングを介してこの注釈を拡張したいと考えています。@java.persitence.Table(name = "table_name", schema = "schema_name") を取得するようにします。これを行う方法はありますか?テーブルの名前にプレフィックスをグローバルに配置するのはどうですか: @java.persitence.Table(name = "prefix_table_name")、それを行う方法はありますか?

よろしくエルゼン

pom.xml スニペット

<groupId>org.jvnet.hyperjaxb3</groupId>
<artifactId>maven-hyperjaxb3-plugin</artifactId>
<version>0.6.0</version>
<executions>
    <execution>
        <goals>
            <goal>generate</goal>
        </goals>
    </execution>
</executions>
<configuration>
    <variant>jpa2</variant>
    <extension>true</extension>
    <roundtripTestClassName>EKMSEnvelopeRoundtripTest</roundtripTestClassName>
    <args>
        <arg>-Xinheritance</arg>
        <arg>-XtoString</arg>
        <arg>-Xannotate</arg>
    </args>
    <schemaExcludes>
        <exclude>ekvaattributes.xsd</exclude>
    </schemaExcludes>
</configuration>

bindings-xjc.xjb スニペット

<jaxb:globalBindings localScoping="toplevel">
    <!-- JPA-entities must be serializable -->
    <xjc:serializable />
</jaxb:globalBindings>


<jaxb:bindings schemaLocation="schema.xsd"
    node="/xs:schema">

    <annox:annotate>
        <!-- my attempt -->
        <annox:annotate annox:class="javax.persistence.Table"
            schema="schema_name">
        </annox:annotate>
    </annox:annotate>

    <hj:persistence>
        <hj:default-generated-id name="Hjid">
            <orm:generated-value strategy="IDENTITY" />
        </hj:default-generated-id>
    </hj:persistence>
</jaxb:bindings>
4

4 に答える 4

2

の作者。

@Stefanの回答を参照してください。schema="schema_name"属性を追加するだけです:

<orm:table name="item" schema="schema_name"/>

orm:table実際には JPA XML 要素であるため、JPA 仕様に記載されています。:)

このスキーマを参照してください。

https://github.com/highsource/hyperjaxb3/blob/master/ejb/schemas/persistence/src/main/resources/persistence/orm/orm_1_0.xsd#L1814-L1815

ここでは基本的に何も発明していません。

そのためにJAXB2 Annotate Pluginは必要ありません。これはOOTBで機能します。

グローバルプレフィックスの問題は次のとおりです。

http://jira.highsource.org/browse/HJIII-87

まだ未解決。カスタム命名によって解決できるようになりましたが、それは非常に厄介です。

https://github.com/highsource/hyperjaxb3/tree/master/ejb/tests/custom-naming

同意します。構成可能にするといいでしょう。

これをグローバルに行う方法を更新します。

<hj:default-entity>
    <orm:table name="item" schema="schema_name"/>
</hj:default-entity>

ただし、関連付けなどのデフォルトをカスタマイズする必要もあります。ここで組み込みのデフォルトを参照してください。

https://github.com/highsource/hyperjaxb3/blob/master/ejb/plugin/src/main/resources/org/jvnet/hyperjaxb3/ejb/strategy/customizing/impl/DefaultCustomizations.xml

于 2015-09-01T21:47:50.447 に答える
2

ヘルプのための@lexicore Thnx。あなたの提案を適切な文脈に置いた後、それはうまくいきました。

    <hj:persistence>
        <hj:default-entity>
            <!-- no need to overwrite the default generated table names-->
            <orm:table schema="schema_name" />
        </hj:default-entity>
    </hj:persistence>
于 2015-09-02T13:31:27.983 に答える
2

これが可能かどうかはわかりませんが、要素を試してみてください。おそらく「スキーマ」属性がありますが、残念ながら十分に文書化されていません。

よろしく、ステファン

<jaxb:bindings schemaLocation="schema.xsd"
node="/xs:schema">
    <annox:annotate>

    <hj:persistence>
        <hj:default-generated-id name="Hjid">
            <orm:generated-value strategy="IDENTITY" />
        </hj:default-generated-id>
    </hj:persistence>

    <!-- try this -->
    <hj:entity>
        <orm:table name="item"/>
    </hj:entity>
</jaxb:bindings>

ソース: http://confluence.highsource.org/display/HJ3/Customization+Guide

于 2015-09-01T15:49:54.293 に答える