簡體   English   中英

Hyperjaxb3:從枚舉元素創建查找表

[英]Hyperjaxb3: Create lookup table from enumeration element

我有一個xsd文件,其中包含帶有枚舉約束的元素:

<xs:complexType name="Request">
    <xs:sequence>
        <xs:element name="CommsAddress" type="xs:string" />
        <xs:element name="CommsAddressType">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="EMAIL"/>
                    <xs:enumeration value="PHONE"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        ...

我希望生成的Java類中的CommsAddressType字段是帶有值EMAILPHONE的生成的枚舉。 反過來,我希望Hibernate使用CommsAddressType表自動生成數據庫模式,該表包含兩行,值EMAILPHONE 然后, Request表可以使用CommsAddressTypeId列簡單地引用它們。

目前,Hyperjaxb3使用類型為StringCommsAddressType字段生成我的Request類:

@XmlElement(name="CommsAddressType")
protected String commsAddressType

並生成架構,以便Request表具有VARCHAR類型的CommsAddressType列。 顯然,這將導致大量不必要的重復數據。

有什么方法可以實現我上面描述的內容? 另外,當我向客戶展示xsd時,如果可能的話,我希望避免在模式中包括任何jaxb或hyperjaxb標記。

免責聲明:我是Hyperjaxb的作者。

如果您使枚舉類型成為Java中的枚舉,Hyperjaxb將把它們作為枚舉而不是字符串處理。 為此,例如,您可以使用以下方法自定義簡單類型:

<jaxb:typesafeEnumClass/>

請參閱此示例

Hyperjaxb會將對應的屬性映射為@Enumerated

不,您不能生成查找表,但是可以自定義枚舉在數據庫中的映射方式。 例如,您可以將其映射為EnumType.ORDINAL

<hj:basic><orm:enumerated>ORDINAL</orm:enumerated></hj:basic>

例子

實際上,使用枚舉,您實際上並不需要JPA查找表。 JPA將根據指定的EnumType映射正確地映射枚舉。

但是您可能需要一個用於您自己目的的查找表-例如能夠在聯接的查詢中產生易於理解的值。

在這種情況下,我建議將枚舉映射為ORDINAL ,並在您自己的DDL腳本上添加查找表以及相應的外鍵。

是的,您可以在單獨的綁定文件(通常為bindings.xjb )中進行所有描述的自定義操作,而不必在架構中直接進行。 在此處查看測試項目, 這里有很多示例。 只需在src/main/resources目錄中查找*.xjb文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM