0

同じ複合型の複数のインスタンスを単一のエンティティに埋め込もうとしていますが、インスタンスごとに新しい複合型を定義しない限り、機能しないようです。私がこれまで補うことができる限り、これはおそらくデフォルトのhyperjaxb3命名戦略によるものです。プラグイン自体にコードを追加するのではなく、注釈を介してデフォルトのhyperjaxb3命名戦略を変更する方法はありますか(たとえば、id戦略の設定と同様)?ありがとう、フレデリク

4

1 に答える 1

1

やろうとしていることの例を提供すると、はるかに簡単になります: スキーマ、生成された注釈、代わりに生成したいもの。

テストプロジェクトの1つにあるものを次に示します。スキーマ:

<xs:element name="a" type="aType"/>
<xs:complexType name="aType">
    <xs:sequence>
        <xs:element name="b0" type="bType" minOccurs="0"/>
        <xs:element name="b1" type="bType" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="bType">
    <xs:annotation>
        <xs:appinfo>
            <hj:embeddable/>
        </xs:appinfo>
    </xs:annotation>
    <xs:sequence>
        <xs:element name="c" minOccurs="0">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="999"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="d" type="xs:int" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>

生成:

@Embedded
@AttributeOverrides({
    @AttributeOverride(name = "c", column = @Column(name = "B0_C", length = 999)),
    @AttributeOverride(name = "d", column = @Column(name = "B0_D", precision = 10, scale = 0))
})
public BType getB0() {
    return b0;
}
@Embedded
@AttributeOverrides({
    @AttributeOverride(name = "c", column = @Column(name = "B1_C", length = 999)),
    @AttributeOverride(name = "d", column = @Column(name = "B1_D", precision = 10, scale = 0))
})
public BType getB1() {
    return b1;
}

名前の衝突は見られません。

アップデート

命名のカスタマイズに関するリンクを次に示します。

このガイドを確認してください:

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

これらの機能のいくつかを示すテスト プロジェクトを次に示します。

http://java.net/projects/hj3/sources/svn/show/trunk/ejb/tests/cu-one

独自の命名戦略を作成して構成することもできます。

http://java.net/projects/hj3/sources/svn/show/trunk/ejb/tests/custom-naming

于 2011-06-26T09:55:23.223 に答える